[Swift 中级 #8] Swift KeyPath 总结:map(\.name) 的原理
\.name 不是 map 的简写语法,而是独立类型 KeyPath 的值。本文整理将属性访问转换为值的含义、只读、值类型写入和引用类型写入这三个层级,以及实际应用场景。
阅读文章LANGUAGE · 52 ARTICLES
按时间顺序浏览 Swift 语言 文章。
全部文章
\.name 不是 map 的简写语法,而是独立类型 KeyPath 的值。本文整理将属性访问转换为值的含义、只读、值类型写入和引用类型写入这三个层级,以及实际应用场景。
阅读文章属性包装器不是 SwiftUI 语法,而是 Swift 5.1 通过 SE-0258 引入的语言功能。本文梳理编译器如何翻译 @Clamped、wrappedValue 和 projectedValue($) 的本质,以及避免滥用的界限。
阅读文章从 Codable 自动合成究竟生成什么,到实际开发中必然遇到的键名不一致、日期格式、嵌套结构、部分失败四种情况的标准处理方案,以及 DecodingError 调试,本文一并整理。
阅读文章map·filter·compactMap·flatMap·reduce 五个函数的区别,取决于闭包返回什么。本文整理了与 for 循环的选择标准、链式调用产生的中间数组,以及 lazy 序列解决的问题。
阅读文章关联类型(associatedtype)是协议中预留的类型空位。本文整理著名 generic constraint 错误的原因、SE-0309 和 SE-0346 如何解除限制,以及 primary associated types 的用法。
阅读文章方法交换是一种在运行时互换连接选择器与 IMP 的映射表的技术。本文整理了惯用的完整实现、_cmd 说谎这一副作用,以及可以使用到什么程度的边界。
阅读文章查看 Swift 5.6 之后的代码,会看到协议名称前面出现 some 或 any:some View、any Error、some Collection。以前可以直接把协议名称写在类型位置,但现在编译器会警告或报错,要求添加 any。…
阅读文章第一次在 Swift 代码中看到尖括号 <T> 时,你可能会停顿一下。函数名旁边多了一个大写字母,打开文档后,还会看到类似 func map<T>( transform: (Element) -> T) -> [T] 的签名。泛型是 Swift 进阶的入门关卡……
阅读文章阅读 Swift 相关文章或版本说明时,经常会看到 SE-0296、SE-0345 这样的编号。介绍 async/await 的文章会标注 SE-0296,讨论 if let name 缩写语法时则会标注 SE-0345。这些编号究竟是什么?
阅读文章打开 Swift 标准库,会发现一个显著事实:除了 Int、Double、Bool 等基本类型,String、Array、Dictionary、Set 也全是 struct。在其他语言中理所当然是类的类型,在 Swift 中都是值类型…
阅读文章Swift 中存在一种奇妙的共存:初学者可以在 Playgrounds 中用一行 print("Hello") 开始学习,但同一种语言也用来编写交织着泛型和宏的标准库。面向小学生的编程教育 App(Swift…
阅读文章