gpt4 book ai didi

ios - 初始化单例异步 iOS

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:05:08 25 4
gpt4 key购买 nike

我有一个名为 YelpService 的单例。它负责从 Yelp 检索数据。当然,每次API调用都必须经过授权。问题是身份验证过程是异步的。如果我每次在使用YelpService之前都必须检查yelp客户端是否被授权,那将是非常多余的。我该如何解决这个问题?

此外,如果我在具有完成处理程序的方法中添加身份验证逻辑,并嵌套在实际进行 API 调用的其他方法中,我会收到错误消息:Command failed due to signal: Segmentation fault: 11

存储 Yelp 客户端以便调用 API 的安全有效方法是什么?我知道在 init 中进行网络调用是不好的。

class YelpService {

static let _shared = YelpService()

private let clientId = "id"
private let clientSecret = "secret"

var apiClient: YLPClient?

init() {

YLPClient.authorize(withAppId: clientId, secret: clientSecret) { (client, error) in
guard error == nil else {
print("YELP AUTH ERROR: \(error!.localizedDescription)")
return
}
guard let client = client else {
print("YELP AUTH ERROR: CLIENT IS NIL")
return
}
self.apiClient = client
}
}
}

最佳答案

你不应该从外部调用 Singleton 类 init()

class YelpService {

static let shared = YelpService()

private let clientId = "id"
private let clientSecret = "secret"

var apiClient: YLPClient?

fileprivate init() {

YLPClient.authorize(withAppId: clientId, secret: clientSecret) { (client, error) in
guard error == nil else {
print("YELP AUTH ERROR: \(error!.localizedDescription)")
return
}
guard let client = client else {
print("YELP AUTH ERROR: CLIENT IS NIL")
return
}
self.apiClient = client
// Here, post notification
}
}
}

首先,从 AppDelegate 中,检查 apiClient 是否已初始化,如果未初始化,则自动第一次使用共享对象将初始化 Singleton 类。

在AppDelegate中添加通知观察者,用于apiClient初始化。

if let apiClient = YelpService.shared.apiClient {
//Do work
}

或者在通知观察者方法中工作。

关于ios - 初始化单例异步 iOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48311767/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com