闭包是 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`
})
这个微型框架的目的是为开发者提供一个辅助函数 weakify
,允许他们声明式地指示他们希望在闭包中使用对 self
的弱非可选引用,而无需担心如何提供此引用。
使用这个 weakify
函数,上面的代码将被转换成更简洁的形式:
import WeakableSelf
service.call(completion: weakify { strongSelf, result in
// use weak non-optional `strongSelf` to handle `result`
})
weakify
适用于最多接受 7 个参数的闭包。
将以下内容添加到你的 Podfile
中
pod "WeakableSelf"
将以下内容添加到你的 Cartfile
中
github "vincent-pradeilles/weakable-self"