首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >数据冲突- Swift

数据冲突- Swift
EN

Stack Overflow用户
提问于 2021-02-16 20:47:20
回答 1查看 29关注 0票数 0

我是Swift新手,我正在从数据库获取VPN证书以创建隧道。问题是,应该包含证书(作为数据类型)的变量正在调用获取证书的函数,但证书需要时间才能出现,因此该变量为空并发送到VPN配置,因此VPN将无法工作。

证书稍后会出现。

我真的不擅长解决这类问题,我试图延迟获取证书的函数,但问题仍然存在(我知道这是一个糟糕的方法,因为网络速度可能不同,并且我无法控制时间)

你能帮帮我吗?

func getCertificate() -> Data? {
    self.loading.onNext(true)
    var configData:String = ""
    
    Services.getCert(authToken: UserManager.currentUser?.token ?? "", method: vpnMethod, userID: String(UserManager.currentUser?.user_id ?? 0)) { (error, VpnModel, Int) in
        self.loading.onNext(false)
        
        if error == nil{
            if VpnModel?.cert_body == nil{
                configData = ""
            }else{
                configData = VpnModel?.cert_body ?? ""
            }
        }
    }
    
    let configurationData = Data(configData.utf8)
    print(String(decoding: configurationData, as: UTF8.self))
    return configurationData
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-16 20:52:29

您需要一个完成符,如下所示

是异步的

func getCertificate(completion:@escaping (Data? ->())) {
    self.loading.onNext(true)
    var configData:String = "" 
    Services.getCert(authToken: UserManager.currentUser?.token ?? "", method: vpnMethod, userID: String(UserManager.currentUser?.user_id ?? 0)) { (error, VpnModel, Int) in
      self.loading.onNext(false) 
      if error == nil{
        if VpnModel?.cert_body == nil{
            configData = ""
        }else{
            configData = VpnModel?.cert_body ?? ""
        }
        let configurationData = Data(configData.utf8)
        print(String(decoding: configurationData, as: UTF8.self))
        completion(configurationData)
     }
   } 
}

呼叫

getCertificate { res in
  print(res)
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66224616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档