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里的一个优雅实现,简单实用

最近的文章

iOS Touch message 传递图解

系统会通过hitTest的方法寻找响应链,完成之后会形成上图模型。 有了模型之后就会发生图上的三个步骤第一步:系统会将所有的 Touch message 优先发送给 关联在响应链上的全部手势。手势根据Touch序列消息和手势基本规则更改自己的状态(有的可能失败,有的可能识别等等)。如果没有一个手势对Touch message 进行拦截(拦截:系统不会将Touch message 发送给响应链顶部响应者),系统会进入第二步第二步:系统将Touch message 发...…

继续阅读
更早的文章

V2ex iOS客户端 BUG & 建议

你可以给我写邮件或在当前页面评论处反馈问题、提出建议。邮箱:to@day.app 。评论:评论 (Disqus,需翻墙)下面列出一些常见的问题与答复1. 签到功能在哪在你刷新帖子列表时会判断需不需要签到,如果需要,则会自动签到,成功后会有一个提示。2. 是否会偷偷上传用户隐私数据当然是不会的,你可以用你的监控工具监控软件的网络请求。软件只会请求 v2ex.com与 Twitter旗下的 crashlytics.com并且,你可以下载源代码自行编译使用3. 为什么没有发帖与搜索这个软件最初的...…

继续阅读