一个关注小型和简单 API 的 Swift 框架,用于处理 Promises 和 Futures。
首先,在您的 Podfile 中加入以下一行
pod 'Futures', '~> 2.0'
然后,只需 import Futures
并开始使用!
let f = Future<Int>() { _ in
.Success(Box(fibonacci(16)))
}
f.onSuccess() {
println($0) // 987
}
注意:由于 Swift 当前似乎是一个暂时的缺陷,所有枚举关联值必须在编译时具有已知大小,因此使用 Box 类返回成功结果。
future(fibonacci(16)).onSuccess() {
println($0) // 987
}
Future<Int>() { _ in
.Error(NSError())
}.onSuccess() { value in
// handle value
}.onError() { error in
// handle error
}
if let fib16 = future(fibonacci(16)).successValue {
println(fib16) // 987
}
if let fib16 = future(fibonacci(16)).valueWithTimeout(10)?.successValue {
println(fib16) // 987
}
let queue = dispatch_queue_create("Test", DISPATCH_QUEUE_SERIAL)
// somewhere else
let f = queue.createFuture(fibonacci(16))
FutureCache 是初始化和缓存昂贵值的简单而有用的方式。
let futureCache = FutureCache<Int>()
futureCache.add("fib16", future: future(fibonacci(16)))
// later...
let expensiveResult = futureCache.valueForKey("fib16")!
首次发布。
添加了一些缺失的文档。
添加了FutureCache。
为onSuccess和onError方法添加了缺失的doc字符串。
更新到Swift 1.2。这销毁了@autoclosure。:(
修复了在使用Promise或Deref的work/onSuccess/onError闭包中的.state属性时可能出现的死锁问题。
为dispatch_queue_t添加了创建关联未来的扩展。
FutureResult
转换为DerefResult
进一步统一了Promise和Future的实现。.value
现在返回一个DerefValue<T>
。添加了.successValue
作为便利函数,以获取以前.value
的行为。isCanceled
块,workBlock可以定期检查它以提前停止昂贵的操作。这与自定义NSOperation子类的工作方式非常相似。仍然存在简单的缩写,用于仅成功并且不关注取消的Futures。@autoclosure(escaping)
缩写。太好了!需要Xcode 6.3 beta 2。