主页 Kingfisher 3 源码全解读笔记
Post
Cancel

Kingfisher 3 源码全解读笔记

个人笔记,不适合阅读

Kingfisher.swift

泛型Base接受任何类型,实例化Kingfisher后将Base的实例保存在 base字段里,

public final class Kingfisher<Base> {
    public let base: Base
    public init(_ base: Base) {
        self.base = base
    }
}

kf字段用于获取对象的 Kingfisher 实例对象,用来调用一些Kingfisher提供的功能。

如果一个类需要使用 kf 字段,则只需要实现KingfisherCompatible协议即可

Kingfisher扩展了所有遵守KingfisherCompatible协议的类,用于实例化一个Kingfisher对象。

public protocol KingfisherCompatible {
    associatedtype CompatibleType
    var kf: CompatibleType { get }
}

public extension KingfisherCompatible {
    public var kf: Kingfisher<Self> {
        get { return Kingfisher(self) }
    }
}

例如

extension Image: KingfisherCompatible { }

如果需要其他的类获得上面的 kf 字段功能,则直接实现 KingfisherCompatible 协议即可。 例如

extension ImageView: KingfisherCompatible { }
extension Button: KingfisherCompatible { }

这是装饰者模式在Swift里的一个优雅实现,简单实用

This post is licensed under CC BY 4.0 by the author.

V2ex iOS客户端 BUG & 建议

iOS Touch message 传递图解

Comments powered by Disqus.

热门标签