Swift lazy 属性的本质

我们经常出于性能的考虑,会在 Swift 开发中使用 lazy 属性或变量,它是一个语法糖,帮助我们只在必要时(初次访问)才完成初始化,构造出实例。 比如: class MyExpensiveObject { // ... func foo() { } } class ViewController: UIViewController { lazy var object = MyExpensiveObject() override viewDidLoad() { super. »

Swift 的可选值优化

在 Objective-C 中,nil 表示空对象,它本质是一个指向 0x00000000 的指针。但对于非指针的值类型,OC 中是无法表示没有值这个概念的,比如 NSInteger,它可以是 0,也可以是其他任何值,但就是不存在没有值。 Swift 作为一种强类型的语言,它从一开始就引入了没有值这个概念,虽然还是用 nil 关键字,但实际语义上有所不同。比如 Int? »

Swift编译器之迷惑行为二

在 App 工程中通过 Cocoapods 引入一个自己的 Swift 业务库 Pod1,该库中有一个 Swift 类服从一个 OC 的协议并实现了部分方法,例如: open class AppDelegate : NSObject, UIApplicationDelegate { open func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: »

Swift编译器之迷惑行为一

OptionSet 是 Swift 中比较常用的一个内置协议,它的存在算是填补了既要强类型,又要支持按位取与的空白,是对 OC 中 NS_OPTIONS 的桥接。从声明上可以看到,OptionSet 协议本身又服从 SetAlgebra 协议,后者只定义了常见的集合操作方法,如 union remove insert 等,而前者在 extension 中给了默认实现: »