期货 2.0.2

期货 2.0.2

测试已测试
Lang语言 SwiftSwift
许可证 MIT
发布最后发布2015年2月
SPM支持 SPM

Cameron Pulsford 维护。



期货 2.0.2

  • 作者
  • Cameron Pulsford

Futures

一个关注小型和简单 API 的 Swift 框架,用于处理 Promises 和 Futures。

目标

  • 我需要为工作中的项目同时使用 Promises 和 Futures,并希望编写自己的库。
  • 使用 Swift 做一些有用的事情。
  • 尽可能简单地编写可能的 Futures 和 Promises 库,包括实现和 API。
  • 仅在必要时扩展 API。如果你使用这个库并希望有一个新功能,告诉我!
  • 使用泛型和其它技术改进我的 旧实现
  • Swift 向后兼容性对我并不是特别重要。一旦我有时间,我会升级到最新的 Swift 版本。如果你使用这个库并不喜欢这个策略,请告诉我。

使用方法

首先,在您的 Podfile 中加入以下一行

pod 'Futures', '~> 2.0'

然后,只需 import Futures 并开始使用!

示例

使用 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
}

将 Futures 与队列关联的简写

let queue = dispatch_queue_create("Test", DISPATCH_QUEUE_SERIAL)
// somewhere else
let f = queue.createFuture(fibonacci(16))

FutureCache

FutureCache 是初始化和缓存昂贵值的简单而有用的方式。

let futureCache = FutureCache<Int>()
futureCache.add("fib16", future: future(fibonacci(16)))
// later...
let expensiveResult = futureCache.valueForKey("fib16")!

版本历史

1.0

首次发布。

1.0.1

添加了一些缺失的文档。

1.1

添加了FutureCache。

1.1.1

为onSuccess和onError方法添加了缺失的doc字符串。

1.2

更新到Swift 1.2。这销毁了@autoclosure。:(

1.2.1

修复了在使用Promise或Deref的work/onSuccess/onError闭包中的.state属性时可能出现的死锁问题。

1.3

为dispatch_queue_t添加了创建关联未来的扩展。

2.0

  • 通过将FutureResult转换为DerefResult进一步统一了Promise和Future的实现。.value现在返回一个DerefValue<T>。添加了.successValue作为便利函数,以获取以前.value的行为。
  • Future现在支持取消。Future的workBlocks现在传递一个isCanceled块,workBlock可以定期检查它以提前停止昂贵的操作。这与自定义NSOperation子类的工作方式非常相似。仍然存在简单的缩写,用于仅成功并且不关注取消的Futures。
  • 根据前两点对FutureCache进行了相应的更新(和简化)。

2.0.1

  • 为Future添加了@autoclosure(escaping)缩写。太好了!需要Xcode 6.3 beta 2。

2.0.2

  • 更新了@autoclosure(escaping)的队列助手。