Ward 1.0.4

Ward 1.0.4

Swain Molster 维护。



Ward 1.0.4

  • Swain Molster

Ward

Travis CI code cov release Swift 4.1 license

CocoaPods compatible Carthage compatible SwiftPM compatible platforms

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 的 未应用的方法引用

使用 Curried function 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(url: "https://github.com/OneAfternoon/Ward.git", from: "1.0.0")

作者