Published on

SwiftUI crypto app — yakuniy ko'rib chiqish

Authors

SwiftUI crypto app — yakuniy ko'rib chiqish

Tabriklaymiz! Agar shu yerga yetib keldingiz — siz juda ko'p narsalarni o'rgandingiz va haqiqatan ham murakkab, professional darajadagi iOS ilovasi yaratdingiz. Keling, nima qilganimizni bir ko'rib o'taylik.


1. Ilova umumiy ko'rinishi

Asosiy ekran:

  • Barcha kriptovalyutalar real vaqt narxlari bilan
  • Qidiruv va saralash (reyting, narx, hisoblar bo'yicha)
  • Animatsiyali ko'rsatgichlar (o'q yuqoriga/pastga)

Portfel ekrani:

  • Foydalanuvchi o'zi qo'shgan tangalar
  • Portfelning umumiy qiymati va 24 soatlik foiz o'zgarishi
  • Core Data orqali saqlanadi — ilova yopilganda ham saqlab qoladi

Tafsilot ekrani:

  • Animatsiyali 7 kunlik chiziqli grafik
  • "Ko'rinish" bo'limi: narx, bozor kap, reyting, hajm
  • "Qo'shimcha" bo'limi: 24s yuqori/past, foiz o'zgarishi, bloklash vaqti
  • Kengaytiriluvchi tavsif matni
  • Rasmiy veb-sayt va Reddit havolalari

Sozlamalar ekrani:

  • Kurs haqida ma'lumot
  • CoinGecko API e'tirofi
  • Dasturchi bo'limi
  • Foydalanish shartlari va maxfiylik siyosati havolalari

2. MVVM arxitekturasi

SwiftUI Crypto App
├── Models/Ma'lumot modellari (CoinModel, MarketDataModel, ...)
├── Core/
│   ├── Home/
│   │   ├── ViewModels/HomeViewModel
│   │   └── Views/HomeView, PortfolioView, HomeStatsView, ...
│   ├── Detail/
│   │   ├── ViewModels/DetailViewModel
│   │   └── Views/DetailView, ChartView
│   ├── Settings/
│   │   └── Views/SettingsView
│   └── Launch/
│       └── Views/LaunchView
├── Services/API xizmatlari (Data Services)
├── Extensions/Yordamchi kengaytmalar
└── Utilities/NetworkingManager, HapticManager

"Arxitekturani boshidan to'g'ri o'rnatish — professional dasturchilarning asosiy ko'nikmasidir. Sizning ilovangiz endi bu darajada."


3. Combine — Publishers va Subscribers

Kurs davomida Combine qanchalik muhimligini ko'rdik. HomeViewModel-da:

private func addSubscribers() {
    // 1. Tangalar + Qidiruv + Saralash → allCoins
    $searchText
        .combineLatest(coinDataService.$allCoins, $sortOption)
        .debounce(for: .seconds(0.5), scheduler: DispatchQueue.main)
        .map(filterAndSortCoins)
        .sink { ... }

    // 2. allCoins + Core Data → portfolioCoins
    $allCoins
        .combineLatest(portfolioDataService.$savedEntities)
        .map(mapAllCoinsToPortfolioCoins)
        .sink { ... }

    // 3. Market Data + portfolioCoins → statistics
    marketDataService.$marketData
        .combineLatest($portfolioCoins)
        .map(mapGlobalMarketData)
        .sink { ... }
}

Faqat bitta sortOption o'zgaruvchisini yangilash — butun ilovani yangilaydi. Bu Combine-ning quvvati.


4. API chaqiruvlar

XizmatEndpointMa'lumot
CoinDataService/coins/marketsBarcha tangalar narxlari
MarketDataService/globalUmumiy bozor statistikasi
CoinDetailDataService/coins/{id}Tanga tafsilotlari
CoinImageServicecoin.imageTanga rasmlari

5. Core Data — ma'lumotlarni saqlash

PortfolioDataService:
- PortfolioContainer (NSPersistentContainer)
- PortfolioEntity (Core Data entity)
- applyChanges()save() + fetchPortfolios()

Portfelga tanga qo'shish, o'chirish, yangilash — hammasi Core Data-ga saqlanadi.


6. Qo'shimcha texnikalar

inout parametrlar:

private func sortCoins(sort: SortOption, coins: inout [CoinModel]) {
    coins.sort { $0.rank < $1.rank }  // yangi massiv yaratilmaydi
}

Lazy NavigationLink (samarali navigatsiya):

NavigationLink(destination: DetailLoadingView(coin: $selectedCoin),
               isActive: $showDetailView,
               label: { EmptyView() })

Timer yordamida animatsiya:

let timer = Timer.publish(every: 0.1, on: .main, in: .common).autoconnect()

GeometryReader va Path:

GeometryReader { geometry in
    Path { path in
        let xPosition = geometry.size.width / CGFloat(data.count) * CGFloat(index + 1)
        let yPosition = (1 - CGFloat((data[index] - minY) / yAxis)) * geometry.size.height
        path.addLine(to: CGPoint(x: xPosition, y: yPosition))
    }
}

7. Ilovani yanada rivojlantirish yo'llari

Agar bu ilovani davom ettirmoqchi bo'lsangiz:

  1. Protokollar va Dependency Injection — arxitekturani yanada mustahkamlash
  2. Unit Tests — ViewModel va Service qatlamlarini sinash
  3. Widget — asosiy tangalar home screen widgetida
  4. Notifikatsiyalar — narx o'zgarganda bildirishnoma
  5. Ko'proq tangalar — CoinGecko API sahifani qo'llab-quvvatlaydi
  6. Dark/Light mode switch — foydalanuvchi tanlovi
  7. Localization — ko'p tilli qo'llab-quvvatlash

8. Nima o'rgandingiz

MVVM arxitekturasi — katta loyihalar uchun
Combine framework — reaktiv dasturlash
Core Data — ma'lumotlarni saqlash
REST API integratsiyasi — URLSession va JSON decode
SwiftUI animatsiyalar — transition, withAnimation, Timer
Custom Shape va Path — chiziqli grafik
GeometryReader — o'lchamga moslashuvchan view
LazyVGrid — ikki ustunli grid
FileManager — rasmlarni kesh qilish
HapticManager — taktil tebranish
Multithreading — background thread + main thread

"Bu kurs bitta video emas, balki 27 ta dars davomida real loyiha qurish tajribasi. Siz endi faqat SwiftUI-ni bilmaysiz — siz katta hajmli, real foydalanuvchilar uchun tayyor ilovani qurishni bilasiz. Bu sizning kelajakdagi ish tashlaganingizda eng muhim ko'rsatkich bo'ladi!"


Xulosa

SwiftUI Crypto App — bu kurs davomida birgalikda qurgan professional iOS ilovasi. Siz iOS dasturlashning eng zamonaviy usullari bilan tanishdingiz. Muvaffaqiyatlar! 🚀🎉

Buy mea coffee