- Published on
SwiftUI crypto app — yakuniy ko'rib chiqish
- Authors
- Name
- ShoxruxC
- @iOSdasturchi
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
| Xizmat | Endpoint | Ma'lumot |
|---|---|---|
| CoinDataService | /coins/markets | Barcha tangalar narxlari |
| MarketDataService | /global | Umumiy bozor statistikasi |
| CoinDetailDataService | /coins/{id} | Tanga tafsilotlari |
| CoinImageService | coin.image | Tanga 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:
- Protokollar va Dependency Injection — arxitekturani yanada mustahkamlash
- Unit Tests — ViewModel va Service qatlamlarini sinash
- Widget — asosiy tangalar home screen widgetida
- Notifikatsiyalar — narx o'zgarganda bildirishnoma
- Ko'proq tangalar — CoinGecko API sahifani qo'llab-quvvatlaydi
- Dark/Light mode switch — foydalanuvchi tanlovi
- 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! 🚀🎉