WeakableSelf
上下文
Closures(闭包)是 Swift 的必备特性之一,Swift 开发者都清楚当闭包捕获外部对象的引用时可能会导致一些问题,尤其是当该对象是 self
时。
为了解决这个问题,开发者需要编写额外的代码,使用如 [weak self]
和 guard
这样的结构,代码看起来可能如下所示
service.call(completion: { [weak self] result in
guard let self = self else { return }
// use weak non-optional `self` to handle `result`
})
WeakableSelf
的目的
此微框架的目的是为开发者提供一个辅助函数 weakify
,它允许他在闭包中声明性地指出他希望使用对 self
的弱引用(非可选),而不必担心如何提供这个引用。
用法
使用这个 weakify
函数,上述代码可以更简洁地转换为:
import WeakableSelf
service.call(completion: weakify { strongSelf, result in
// use weak non-optional `strongSelf` to handle `result`
})
weakify
与最多接受 7 个参数的闭包一起使用。
安装
要求
- Swift 4.2+
- Xcode 10+
CocoaPods
将以下内容添加到您的 Podfile
pod "WeakableSelf"
Carthage
将以下内容添加到您的 Cartfile
github "vincent-pradeilles/weakable-self"