Alice 5: 给 Future 加点糖

我喜欢糖。

恰如其分的「糖」能为体验加分不少。

我给 Future 也加了点糖:

Async
    .background { 
        readFile()
    }
    .main { 
        updateUI   
    }

// or
let taskA = Async.utility {
    // ...
}
let taskB = Async.utility { 
    // ...
}
    
taskA.and(taskB)
    .userInteractive()
    .map { 
        $0.merge($1)
    }
    .timeout(3)
    .main()
    .then { 
        // ...
    }

恰如其分,不是吗?😉

其中 Asyncpublic typealias Async = Future<Void, Never>,你可以把它当成一个命名空间。

Combine

我没有忘了 Combine!

Async 提供了 Future 与 Publisher 的互转接口:

let pub = future.asPublisher()

let future= pub.asFuture(whenNoOutput: . unexpectedResult)

这样,你的异步代码可以在 Alice 与 Combine 之间自由桥接啦!

如果你对 Combine 有兴趣,不妨看一下 CombineX!它是一个 Combine 的开源实现,可以作为 Combine 在 iOS 8、macOS 10.10 与 Linux 上的 polyfill。


Sugar 的灵感来自于 Async,一颗超甜的 Dispatch 糖。


#swift #http #future #alice #alice-serial

Comments