面向协议编程(POP):突破OOP局限的方法
面向协议编程(POP)根据类型能做什么来设计类型,而不是看它继承了什么。本文通过Swift示例,总结继承的瓶颈、用协议组合解决问题的方法,以及应避免使用的场景。
阅读文章精选主题 · 41 篇文章
从基础原理到实践取舍,系统浏览 iOS 开发 文章。
最新文章
面向协议编程(POP)根据类型能做什么来设计类型,而不是看它继承了什么。本文通过Swift示例,总结继承的瓶颈、用协议组合解决问题的方法,以及应避免使用的场景。
阅读文章RIBs 按业务逻辑单元而不是屏幕拆分应用。本文整理无屏幕组件存在这一前提、它只适合超大型组织的原因,以及它与 VIPER 的区别。
阅读文章ReactorKit 是让 UIKit 与 RxSwift 组合采用单向数据流作为事实标准的框架。本文总结 View 和 Reactor 两种角色、需要 Mutation 中间阶段的原因,以及它与 TCA 的区别。
阅读文章如果你已经读到 iOS 架构系列这里,所有选项都摆在面前了:MVC、MVVM、MVP、VIPER、Clean Architecture、MV,以及 TCA。
阅读文章在 SwiftUI 时代的架构讨论中,有一个名字无法绕开:Point-Free 打造的 TCA(The Composable Architecture)。
阅读文章你经常会在招聘信息或技术博客中看到“基于 Clean Architecture”这句话。但真正打开代码后,会发现每个团队的实现都不一样。有的地方有 UseCase,有的没有,Repository 的职责也各不相同。
阅读文章Swift Copy-on-Write 在赋值值类型时共享存储空间,只有一方被修改时才执行实际复制。本篇将说明这一优化如何保留值语义,同时降低原型模式的作用。
阅读文章Swift 静态工厂方法通过名称表达创建意图,并控制返回类型、缓存和实例复用。本文总结选择 static func make 而不是 init 的优缺点,以及它与 GoF 模式的区别。
阅读文章学习 iOS 开发时,迟早会遇到 RxSwift 或 Combine 这道墙。招聘信息里几乎必然出现它们,但打开代码后,看到 map、flatMap、sink 连成一串的陌生语法,很容易感到困惑。“明明用闭包和代理也能正常运行,真的有必要学这个吗?”
阅读文章翻开设计模式的书,解释器模式总会在接近最后的位置出现。这是一个很容易因为“这到底什么时候会用到”而略过的模式。
阅读文章你是否曾在不同类中复制粘贴相似逻辑,并想着“这好像不太对”?在 iOS 应用里,当你第三次复制某个页面的数据加载代码时,手就会停下来。
阅读文章在 Objective-C 代码中,用方括号包裹的 [receiver message] 语法看起来就像普通的方法调用。
阅读文章使用 Swift 开发应用时,我们每天会写几十次类似 for item in array 的循环。由于太过自然,往往要到尝试用 for-in 遍历自定义类型并遇到编译错误后,才会好奇:“这个循环内部到底发生了什么?”
阅读文章Facade Pattern 为由多个对象交织而成的子系统提供一个简单的统一入口。本文以 Swift 用户注册为例,讲解如何集中管理调用顺序,以及它与 Adapter、Proxy、Decorator 的区别。
阅读文章状态模式将各状态的行为和转换集中到对象或 enum 中,减少分散的条件判断。本文介绍重构 Swift 界面状态的步骤与策略模式般的结构如何根据设计意图进行区分。
阅读文章SwiftUI 介绍文档的第一行总会提到“声明式(declarative)框架”。React 和 Jetpack Compose 也都称自己为声明式。
阅读文章Swift 工厂函数会为创建逻辑赋予表达意图的名称,并让返回类型和复用策略更加灵活。本文总结选择 static func 而不是 init 的标准,以及它与 GoF 工厂方法的区别。
阅读文章适配器模式会将旧版 API 的接口转换为新代码所期待的协议。本文整理了如何在 Swift 中建立转换边界、简化替换与测试,以及它与其他封装模式的区别。
阅读文章上一篇介绍了 Massive View Controller 产生的原因。由于视图控制器同时承担 View 和 Controller 的职责,无处安放的代码最后全都堆在那里。
阅读文章开始学习 iOS 开发后,你一定会遇到一门语言:充满方括号的陌生语法,以及 NSString 这类让人摸不着头脑的前缀。
阅读文章使用 Swift 开发应用时,你可能遇到过这样的情况:用 do-catch 捕获了错误,却发现真正显示在屏幕上的消息并不理想。
阅读文章