首页 > 解决方案 > 主线程与后台线程上的 CompletionHandler 行为

问题描述

使用方法的线程在完成处理程序方面是否重要?在主线程上运行时,我没有问题;(data) in完成处理程序被调用,因此函数的完成处理程序在其中。

以下是我的代码:

  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.

这是线程处理的问题吗?有哪些最佳实践可以确保代码跨线程运行良好?

标签: iosswiftmultithreadingcompletionhandler

解决方案


在您收到响应之前,您的关闭已被解除分配。@escaping像这样添加:static func getInfo(user: User, completion: @escaping (([String:String]) -> Void)? = nil)将其保持在范围内。


推荐阅读