主线程与后台线程上的 CompletionHandler 行为
CompletionHandler Behavior on Main vs Background thread
从中使用方法的线程对 completionHandlers 有影响吗?在主线程上 运行 时,我没有问题; (data) in
completionHandler 被调用,因此函数的 completionHandler 在其中。
以下是我的代码:
static func getInfo(user: User,completion: (([String:String]) -> Void)? = nil){
print(user.apiUid)
var enrolledCourses: [String:String] = [:]
NetworkingManager.staticGeneralRequest(withEndpoint: someURL, oauthToken: user.oauth_token, oauthTokenSecret: user.oauth_token_secret) { (data) in
let decodedData: [String:String] = data.getData()
completion?(decodedData)
}
}
//NOTE: According to the compiler,
//the use of an optional completionHandler means that it's `@escaping` by default.
这是一个预留到线程的问题吗?有哪些最佳实践可以确保代码跨线程正常工作?
您的闭包在您收到响应之前已被解除分配。像这样添加 @escaping
:static func getInfo(user: User, completion: @escaping (([String:String]) -> Void)? = nil)
以使其保持在范围内。
从中使用方法的线程对 completionHandlers 有影响吗?在主线程上 运行 时,我没有问题; (data) in
completionHandler 被调用,因此函数的 completionHandler 在其中。
以下是我的代码:
static func getInfo(user: User,completion: (([String:String]) -> Void)? = nil){
print(user.apiUid)
var enrolledCourses: [String:String] = [:]
NetworkingManager.staticGeneralRequest(withEndpoint: someURL, oauthToken: user.oauth_token, oauthTokenSecret: user.oauth_token_secret) { (data) in
let decodedData: [String:String] = data.getData()
completion?(decodedData)
}
}
//NOTE: According to the compiler,
//the use of an optional completionHandler means that it's `@escaping` by default.
这是一个预留到线程的问题吗?有哪些最佳实践可以确保代码跨线程正常工作?
您的闭包在您收到响应之前已被解除分配。像这样添加 @escaping
:static func getInfo(user: User, completion: @escaping (([String:String]) -> Void)? = nil)
以使其保持在范围内。