Swift kingfisher设计浅读

上篇内容讲的flutter的数据库设计,本篇就讲一讲swift方面的.

本篇内容,先不回忆我的项目代码,从kf的设计上体验的一下kingfisher的几点设计之美

Builder

链式调用,不算特别高端,但是写架构的话也会注意这一点.

别名

通过别名解决多平台组件问题

kf命名

架构上,注意不要对系统的对象extension出太多你自定义的方法,在协议上进行拓展,不伤系统,保证原生api的健壮,不要让自己过多的api污染原生的api

rx系列如此

swift 复制代码
extension ReactiveCompatible {
    /// Reactive extensions.
    public static var rx: Reactive<Self>.Type {
        get { Reactive<Self>.self }
        // this enables using Reactive to "mutate" base type
        // swiftlint:disable:next unused_setter_value
        set { }
    }

    /// Reactive extensions.
    public var rx: Reactive<Self> {
        get { Reactive(self) }
        // this enables using Reactive to "mutate" base object
        // swiftlint:disable:next unused_setter_value
        set { }
    }
}

snp是如此

swift 复制代码
var snp: ConstraintViewDSL {
        return ConstraintViewDSL(view: self)
    }

DataReceivingSideEffect

options中设置了一个var onDataReceived: [DataReceivingSideEffect]? = nil 这个类似一个插件,在接收到网络请求回调的时候foreach所有的onDataReceived,做数据处理

这东西在网络请求的moya也有使用

从架构方面来说,这是一种生命钩子下发的应用,因为做底层设计,肯定是不允许业务代码写到底层中,但是有一些业务又必须应用某些钩子,比如权限校验,比如进度的回调等等,这时候设计插件,在底层应用到业务,是十分有效且方便的.

RetrievingContext

上下文的概念,包含KingfisherParsedOptionsInfo以及source 简单的设计了一层上下文,只不过option已经涵盖了几乎所有的该此图片加载需要的参数,context在kf中的概念也就没那么重了

我拿出来提是context这个概念词也是架构层面比较重要的,承载了某个行为所需要的信息内容,比如flutter中设计上下层组件,InheritedWidget

假设设计一个tabbar组件,currentIndex,tab的所有主题配置(背景色,长宽高,item字体等等等),就可以设置在上层组件树中,通过InheritedWidget获取到总的信息,在架构上,这就是context的概念.

结尾

今天大概看了kingfisher的源码,也并不是朝着一行行探索kingfisher的源码实现的,只是从kingfisher的源码中,略微说明一下,我理解的好代码的架构,是如何一点点设计出来的,也算是一种抛砖引玉.

我记录blog目前有一个问题,脑子里想的很多很多,但是写出来又感觉在写水文,这也是我个人的能力缺陷,希望能慢慢改善.

如果各位读者喜欢本篇这方面的内容,我会继续记录的.

相关推荐
初级代码游戏4 小时前
iOS开发 SwiftUI 14:ScrollView 滚动视图
ios·swiftui·swift
初级代码游戏7 小时前
iOS开发 SwitftUI 13:提示、弹窗、上下文菜单
ios·swiftui·swift·弹窗·消息框
zhyongrui9 小时前
托盘删除手势与引导体验修复:滚动冲突、画布消失动画、气泡边框
ios·性能优化·swiftui·swift
zhangfeng113312 小时前
CSDN星图 支持大模型微调 trl axolotl Unsloth 趋动云 LLaMA-Factory Unsloth ms-swift 模型训练
服务器·人工智能·swift
zhyongrui1 天前
SnipTrip 发热优化实战:从 60Hz 到 30Hz 的性能之旅
ios·swiftui·swift
大熊猫侯佩2 天前
Neo-Cupertino 档案:撕开 Actor 的伪装,回归 Non-Sendable 的暴力美学
swift·observable·actor·concurrency·sendable·nonsendable·data race
2501_915921434 天前
在没有源码的前提下,怎么对 Swift 做混淆,IPA 混淆
android·开发语言·ios·小程序·uni-app·iphone·swift
00后程序员张4 天前
对比 Ipa Guard 与 Swift Shield 在 iOS 应用安全处理中的使用差异
android·开发语言·ios·小程序·uni-app·iphone·swift
大熊猫侯佩4 天前
星际穿越:SwiftUI 如何让 ForEach 遍历异构数据(Heterogeneous)集合
swiftui·swift·遍历·foreach·any·异构集合·heterogeneous
hjs_deeplearning5 天前
认知篇#15:ms-swift微调中gradient_accumulation_steps和warmup_ratio等参数的意义与设置
开发语言·人工智能·机器学习·swift·vlm