我是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
}
发布于 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)
}
https://stackoverflow.com/questions/66224616
复制相似问题