小编Sma*_*alk的帖子

如何使用Combine + Swift复制PromiseKit风格的链式异步流

我在一个项目中成功地使用了 PromiseKit,直到 Xcode 11 beta 破坏了 PK v7。为了减少外部依赖,我决定废弃 PromiseKit。处理链式异步代码的最佳替代品似乎是使用新组合框架的 Futures。

我正在努力使用 Combine 复制简单的 PK 语法

前任。简单的 PromiseKit 链式异步调用语法

getAccessCodeFromSyncProvider.then{accessCode in startSync(accessCode)}.then{popToRootViewController}.catch{handleError(error)}
Run Code Online (Sandbox Code Playgroud)

我明白:

async/await 的 Swift 标准库实现将解决这个问题(async/await 尚不存在,尽管Chris Latter 本人有很多喋喋不休和参与

我可以使用信号量进行复制(容易出错?

flatMap 可用于链接 Futures

我想要的异步代码应该能够按需调用,因为它涉及确保用户登录。我正在努力解决两个概念性问题。

  1. 如果我将 Futures 包装在一个方法中,sink以处理结果,则该方法似乎在订阅者被调用之前超出了范围sink

  2. 由于 Futures 只执行一次,我担心如果我多次调用该方法,我只会从第一次调用中得到旧的、陈旧的结果。要解决这个问题,也许我会使用 PassthroughSubject?这允许按需调用发布者。

问题:

  1. 我是否必须保留调用方法之外的每个发布者和订阅者
  2. 如何使用 Swift 标准库复制简单的链式异步,然后将其嵌入到我可以按需调用以从顶部重新启动链式异步调用的 swift 实例方法中?
//how is this done using Combine?
func startSync() {
 getAccessCodeFromSyncProvider.then{accessCode in startSync(accessCode)}.catch{\\handle error here}
}
Run Code Online (Sandbox Code Playgroud)

asynchronous swift combine

14
推荐指数
2
解决办法
6109
查看次数

Apple 登录:Apple 返回的“用户”凭据是永久的吗?

我能够成功访问 Apple 返回的凭据,作为其新(WWDC '19 -- iOS 13)登录 Apple 库的一部分。

在此委托方法中访问凭证:

extension ViewController: ASAuthorizationControllerDelegate {
    func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) {
        if let appleIDCredential = authorization.credential as? ASAuthorizationAppleIDCredential {
         //here is credentials . 
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后使用“用户”属性来提取用户 ID:

    credential.user 
    //returns, for example, '000046.20082df1df9a41b78cd1552979288e19.2346' dummy value
Run Code Online (Sandbox Code Playgroud)

对于该特定 AppleID(也许是该特定应用程序),此“用户”属性是否被理解为静态/永久?

(我正在访问同步 API,并希望从 44 个字符的 Apple 'user' 凭证中硬编码用户凭证。)

apple-sign-in

10
推荐指数
1
解决办法
2411
查看次数

标签 统计

apple-sign-in ×1

asynchronous ×1

combine ×1

swift ×1