Published on

SwiftUI Map App β€” Loyiha sozlash va Location modeli

Authors

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:

  1. Assets.xcassets papkasi β€” accent rang, app icon, joy rasmlari, logotip
  2. LocationsDataService.swift fayli β€” tayyor ma'lumotlar massivi

Assets-ni almashtirish

  1. Navigator-da mavjud Assets.xcassets-ni o'ng tugma β†’ Delete β†’ Move to Trash
  2. Yuklab olingan Assets.xcassets papkasini loyihaga sudrab tashlang
  3. 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_3
    • rome/ β€” 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:

  1. Assets.xcassets ichiga yangi papka yarating (masalan, london/)
  2. Rasmlarni joylashtiring va nomlang: london_big_ben_1, london_big_ben_2...
  3. LocationsDataService.swift-dagi locations massiviga yangi Location ob'ekti qo'shing
  4. imageNames-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.

Buy mea coffee