- Published on
SwiftUI Map App — Loyiha sozlash va Location modeli
- Authors
- Name
- ShoxruxC
- @iOSdasturchi
Loyiha sozlash va Location modeli
Bu videoda Xcode loyihasi yaratiladi, tayyor assets import qilinadi va ilovaning asosiy ma'lumot modeli — Location struct-i quriladi.
Yangi Xcode loyihasi yaratish
Xcode → Create a new Xcode project → App → iOS
Muhim sozlamalar:
- Product Name:
SwiftUIMapApp(yoki xohlagan nom) - Interface: SwiftUI
- Language: Swift
- Core Data: o'chirilgan
- Tests: o'chirilgan
MVVM papka tuzilmasi
Navigator-da to'rtta yangi guruh yaratiladi:
Models/
Views/
ViewModels/
DataServices/
Assets import qilish
Dars resurslari zip fayli ikkita narsani o'z ichiga oladi:
- Assets.xcassets papkasi — accent rang, app icon, joy rasmlari, logotip
- LocationsDataService.swift fayli — tayyor ma'lumotlar massivi
Assets-ni almashtirish
- Navigator-da mavjud
Assets.xcassets-ni o'ng tugma → Delete → Move to Trash - Yuklab olingan
Assets.xcassetspapkasini loyihaga sudrab tashlang - Dialog oynasida:
- ✅ Copy items if needed
- ✅ Add to targets — belgilanishi shart, aks holda rasm ilovaga qo'shilmaydi
Assets tarkibi
- AccentColor — ilova bo'yicha asosiy rang (qizil — Maraschino)
- AppIcon — asosiy ilova ikonkasi
- Locations/ — joy rasmlari, papkalar bo'yicha guruhlangan:
paris/—paris_eiffel_tower_1,paris_eiffel_tower_2,paris_eiffel_tower_3rome/—rome_coliseum_1,rome_coliseum_2,rome_coliseum_3
- Logos/ — ilova logotipi va launch screen rasmi
Rasm nomlari aniq muhim — kod ichida shu nomlar bilan murojaat qilinadi.
Accent rangni sozlash
Light va Dark mode uchun bir xil rang bo'lsa:
- Appearances: None → bitta rang barcha rejimlarda ishlatiladi
Har ikki rejim uchun alohida rang kerak bo'lsa:
- Appearances: Any, Dark → ikkita rang alohida belgilanadi
Location modeli
Models/ papkasida yangi Swift File yaratiladi (SwiftUI View emas) — Location.swift.
import Foundation
import MapKit
struct Location {
let name: String
let cityName: String
let coordinates: CLLocationCoordinate2D
let description: String
let imageNames: [String]
let link: String
}
Muhim tafsilotlar
import MapKit — CLLocationCoordinate2D turi MapKit ichida joylashgan, shuning uchun qo'shimcha import zarur.
imageNames: [String] — bu [UIImage] emas, balki rasm nomlarining massivi. Shu yo'l bilan rasm faqat ekranda ko'rsatilishi kerak bo'lganda yuklanadi, dastlabki yuklashda barcha rasmlar xotiraga o'tirtirilmaydi.
LocationsDataService — tayyor ma'lumotlar
DataServices/ papkasiga yuklab olingan LocationsDataService.swift fayli sudrab tashlanadi (xuddi assets kabi sozlamalar bilan).
import Foundation
import MapKit
class LocationsDataService {
static let locations: [Location] = [
Location(
name: "Colosseum",
cityName: "Rome",
coordinates: CLLocationCoordinate2D(latitude: 41.8902, longitude: 12.4922),
description: "The Colosseum is an oval amphitheatre...",
imageNames: ["rome_coliseum_1", "rome_coliseum_2", "rome_coliseum_3"],
link: "https://en.wikipedia.org/wiki/Colosseum"
),
Location(
name: "Eiffel Tower",
cityName: "Paris",
coordinates: CLLocationCoordinate2D(latitude: 48.8584, longitude: 2.2945),
description: "The Eiffel Tower is a wrought-iron lattice tower...",
imageNames: ["paris_eiffel_tower_1", "paris_eiffel_tower_2", "paris_eiffel_tower_3"],
link: "https://en.wikipedia.org/wiki/Eiffel_Tower"
)
// ... qolgan joylar
]
}
Fayl import qilinganida Location so'zi yashil rangga bo'yaladi — bu Location modeli to'g'ri tanilayotganligining belgisi. Agar xato ko'rsatsa, Location struct-ining maydonlari DataService-dagi qiymatlar bilan mos kelmasligi mumkin.
Yangi joy qo'shish
Keyinchalik ilovaga yangi joy qo'shish uchun:
Assets.xcassetsichiga yangi papka yarating (masalan,london/)- Rasmlarni joylashtiring va nomlang:
london_big_ben_1,london_big_ben_2... LocationsDataService.swift-dagilocationsmassiviga yangiLocationob'ekti qo'shingimageNames-dagi nomlar asset nomlariga to'liq mos kelishini tekshiring
Loyiha holati
Bu video oxirida loyiha tuzilmasi:
SwiftUIMapApp/
├── Models/
│ └── Location.swift
├── Views/
├── ViewModels/
├── DataServices/
│ └── LocationsDataService.swift
├── Assets.xcassets/
│ ├── AccentColor
│ ├── AppIcon
│ ├── Locations/
│ └── Logos/
└── ContentView.swift
Xcode-da Build (⌘B) bajarish muvaffaqiyatli bo'lishi kerak — hozircha hech qanday UI qurilmagan, lekin ma'lumot qatlami tayyor.
Keyingi videoda LocationsViewModel qurilib, xarita va navigatsiya uchun zarur holat boshqaruvi tashkil etiladi.