做五金建材市场的网站,公司网站备案材料,网站优化可以做哪些优化,深圳做网站 龙华信科Combine 系列
Swift Combine 从入门到精通一Swift Combine 发布者订阅者操作者 从入门到精通二Swift Combine 管道 从入门到精通三Swift Combine 发布者publisher的生命周期 从入门到精通四Swift Combine 操作符operations和Subjects发布者的生命周期 从入门到精通五Swift Com…Combine 系列
Swift Combine 从入门到精通一Swift Combine 发布者订阅者操作者 从入门到精通二Swift Combine 管道 从入门到精通三Swift Combine 发布者publisher的生命周期 从入门到精通四Swift Combine 操作符operations和Subjects发布者的生命周期 从入门到精通五Swift Combine 订阅者Subscriber的生命周期 从入门到精通六Swift 使用 Combine 进行开发 从入门到精通七Swift 使用 Combine 管道和线程进行开发 从入门到精通八Swift Combine 使用 sink, assign 创建一个订阅者 从入门到精通九Swift Combine 使用 dataTaskPublisher 发起网络请求 从入门到精通十
1. 用 Future 来封装异步请求以创建一次性的发布者
目的使用 Future 将异步请求转换为发布者以便在 Combine 管道中使用返回结果。
import Contacts
let futureAsyncPublisher FutureBool, Error { promise in // 1CNContactStore().requestAccess(for: .contacts) { grantedAccess, err in // 2// err is an optionalif let err err { // 3 return promise(.failure(err))}return promise(.success(grantedAccess)) // 4 }
}.eraseToAnyPublisher()Future 本身由你定义返回类型并接受一个闭包promise。 它给出一个与类型描述相匹配的 Result 对象你可以与之交互。只要传入的闭包符合类型要求任何异步的 API 你都可以调用。在异步 API 完成的回调中由你决定什么是失败还是成功。 对 promise(.failure(FailureType)) 的调用返回一个失败的结果。或者调用 promise(.success(OutputType)) 返回一个值。 Future 在创建时立即发起其中异步 API 的调用而不是 当它收到订阅需求时。 这可能不是你想要或需要的行为。 如果你希望在订阅者请求数据时再发起调用你可能需要用 Deferred 来包装 Future。 如果您想返回一个已经被解析的 promise 作为 Future 发布者你可以在闭包中立即返回你想要的结果。
以下示例将单个值 true 返回表示成功。 你同样可以简单地返回 false发布者仍然会将其作为一个成功的 promise。
let resolvedSuccessAsPublisher FutureBool, Error { promise inpromise(.success(true))
}.eraseToAnyPublisher()一个返回 Future 发布者的例子它立即将 promise 解析为错误。
enum ExampleFailure: Error {case oneCase
}let resolvedFailureAsPublisher FutureBool, Error { promise inpromise(.failure(ExampleFailure.oneCase))
}.eraseToAnyPublisher()参考
https://heckj.github.io/swiftui-notes/index_zh-CN.html
代码
https://github.com/heckj/swiftui-notes