ward
是一个 Swift 微型框架,用于帮助清理丑陋的内存管理语法。
func useAClosureBasedAPI(block: @escaping (Something) -> Void) { ... }
useAClosureBasedAPI(block: { [weak self] something in
guard let strongSelf = self else {
return
}
strongSelf.handle(something)
})
useAClosureBasedAPI(block: ward(self) { strongSelf, something in
strongSelf.handle(something)
})
public func ward<Object: AnyObject>(_ object: Object, f: @escaping (Object) -> Void) -> () -> Void {
return { [weak object] in
guard let object = object else { return }
f(object)
}
}
支持 Swift 的 未应用的的方法引用
使用柯里化函数 API 来调用 Swift 自动合成的实例方法的静态访问器
class MyViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
useAClosureBasedAPI(block: ward(self, MyViewController.handleSomething))
// MyViewController.handleSomething is of type (MyViewController) -> (Something) -> Void
}
func handleSomething(_ something: Something) {
...
}
}
支持非 Void
返回的闭包
/// Returns half of `count` while `self` is alive. If `self` has deallocated, returns the provided default value (nil).
let halfOfCountIfSelfAlive: (_ count: Int) -> Int? = ward(self, else: nil) { _, count in
return count / 2
}
支持多个对象的 ward
let anObject = MyClass()
ward(self, anObject) { strongSelf, theObject in
...
}
Carthage
github 'OneAfternoon/Ward' ~> 1.0
CocoaPods
pod 'Ward', '~> 1.0'
Swift Package Manager
.package(url: "https://github.com/OneAfternoon/Ward.git", from: "1.0.0")