- Published on
Kingfisher: Rasm yuklash uchun mukammal alternativ
- Authors
- Name
- ShoxruxC
- @iOSdasturchi
Kingfisher haqida
Oldingi darsda SDWebImage haqida gaplashgan edik. Kingfisher ham xuddi shunday vazifani bajaruvchi, internetdan rasmlarni tortib olib, ularni xotirada keshlaydigan (cache) yana bir kuchli vositadir.
Qaysi birini ishlatish butunlay o'zingizning ixtiyoringiz. Ikkala paket ham ishlab chiqarishdagi (production) yirik dasturlarda faol qo'llaniladi va ishlatilishi jihatidan bir-biriga juda o'xshash.
1. Paketni o'rnatish
- Xcode'da
Package Dependenciesbo'limidan+tugmasini bosib qidiruvga kiring. https://GitHub.com/onevcat/Kingfisherhavolasini kiriting.- Paketni topgach, uni loyihangizga qo'shing.
2. Asosiy foydalanish (KFImage)
Kingfisher'da rasm yuklash uchun KFImage dan foydalaniladi:
import SwiftUI
import Kingfisher
struct KingfisherBootcamp: View {
let imageUrl = URL(string: "https://picsum.photos/200/300")
var body: some View {
KFImage(imageUrl)
.placeholder {
// Rasm yuklanayotganda chiqadigan vaqtinchalik ko'rinish
ProgressView()
}
.resizable()
.aspectRatio(contentMode: .fit) // Qisqaroq qilish
.frame(width: 200, height: 200)
}
}
Qiziqarli fakt: Kingfisher paketining nomi juda tezkor baliqchi qush (Kingfisher - Alqor) nomidan olingan.
3. Qo'shimcha funksiyalar
Kingfisher bizga bir nechta juda foydali modifikatorlarni ham taqdim etadi:
Rasm yuklanishdagi hodisalar (Events):
KFImage(imageUrl)
.onProgress { received, total in
print("Yuklanmoqda: \(received) / \(total)")
}
.onSuccess { result in
print("Muvaffaqiyatli yuklandi: \(result.image)")
}
.onFailure { error in
print("Xatolik yuz berdi: \(error.localizedDescription)")
}
Faqat vaqtinchalik xotira (Memory Cache): Agar rasmlar juda ko'p bo'lsa va siz foydalanuvchining telefon xotirasini band qilmaslikni xohlasangiz, .cacheMemoryOnly() ni ishlating. Bunda rasmlar faqat ilova ochiq turgan vaqtidagina saqlanadi va ilova yopilganda o'chib ketadi.
4. Arxitekturaga moslash (Qobiq yaratish)
Huddi SDWebImage kabi, Kingfisherni ham ilovaning har bir faylida alohida import Kingfisher qilib yozish yaxshi amaliyot emas. Tasavvur qiling, siz butun ilovangizda SDWebImage ishlatgansiz va endi Kingfisher'ga o'tmoqchisiz. Buning uchun yuzlab fayllarni o'zgartirib chiqishingizga to'g'ri keladi.
Shuning uchun loyiha boshlanishidanoq o'zimizning maxsus qobiq (ImageLoader) yaratganimiz ma'qul:
import SwiftUI
import Kingfisher
struct CustomImageLoader: View {
let url: String
var contentMode: ContentMode = .fill
var body: some View {
// SDWebImage o'rniga faqat shu yerda KFImage'ga o'zgartiramiz
KFImage(URL(string: url))
.resizable()
.aspectRatio(contentMode: contentMode)
}
}
Ana endi butun ilova bo'ylab faqatgina CustomImageLoader(URL: "...") ni chaqiramiz. Qaysi SDK dan foydalanilayotgani ilovaning qolgan qismi uchun ahamiyatsiz bo'ladi.
Xulosa
Kingfisher — bu juda moslashuvchan, xavfsiz va oson SDK. Rasmlarni oldindan yuklab olish (prefetching) mexanizmi bunda ham mavjud bo'lib, uning yordamida ilova ishlash tezligini sezilarli oshirishingiz mumkin.