Published on

Kingfisher: Rasm yuklash uchun mukammal alternativ

Authors

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 Dependencies bo'limidan + tugmasini bosib qidiruvga kiring.
  • https://GitHub.com/onevcat/Kingfisher havolasini 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.

Buy mea coffee