2017-08-30 19 views
-1

我学到迅速不久前,我有这样的代码打印数组中的一些问题:“在主线程打印阵列swift3的Xcode 8”

class InitController: UIViewController { 
public var initdata = [(id: String, name: String)]() 
override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
    print("initdata", initdata) 
    init_auth() 

} 
func init_auth(){ 
    let json: [String: Any] = ["token": UserDefaults.standard.value(forKey: "token"), "id":UserDefaults.standard.value(forKey: "id")] 
    //let jsonData = try? JSONSerialization.data(withJSONObject: json) 
    let jsonData = try? JSONSerialization.data(withJSONObject: json) 
    let url = "http://some_ip/api" 
    var request = URLRequest(url: URL(string: url)!) 
    request.httpMethod = "POST" 

    request.httpBody = jsonData 
    request.addValue("application/json", forHTTPHeaderField: "Content-Type") 
    request.addValue("application/json", forHTTPHeaderField: "Accept") 
    //print(jsonData) 

    let task = URLSession.shared.dataTask(with: request) { data, responce, error in guard let data = data, error == nil else { 
     print(error?.localizedDescription ?? "No data") 
     return 
     } 
     let responceJSON = try? JSONSerialization.jsonObject(with: data, options: []) 
     if let responceJSON = responceJSON as? [String: Any]{ 
      let s = responceJSON["specialities"] as? NSDictionary 
      let d = s?["items"] as! NSArray 
      for i in d { 
       let f = i as? NSDictionary 
       self.initdata.append((id: f?["id"] as! String, name: f?["name"] as! String)) 
      } 
     } 
    } 
    print("list", self.initdata) 
    task.resume() 
} 

} initdata是空数组,但我得到了一些JSON文件并追加这个数组。我尝试打印initdata,但这个数组是零。我想可能是线程中的问题,但我不知道如何实现这一点。

+1

你应该看看[问]和[MCVE] – pvg

+0

URLSession是异步的。在下载之前很长时间很长时间才打印initData。并请添加一些错误处理。每一个!是你的应用程序可能崩溃的一个点。至少学习“如果让”。 – gnasher729

回答

0

试试这个 -

func init_auth(){ 
    let json: [String: Any] = ["token": UserDefaults.standard.value(forKey: "token"), "id":UserDefaults.standard.value(forKey: "id")] 
    //let jsonData = try? JSONSerialization.data(withJSONObject: json) 
    let jsonData = try? JSONSerialization.data(withJSONObject: json) 
    let url = "http://some_ip/api" 
    var request = URLRequest(url: URL(string: url)!) 
    request.httpMethod = "POST" 

    request.httpBody = jsonData 
    request.addValue("application/json", forHTTPHeaderField: "Content-Type") 
    request.addValue("application/json", forHTTPHeaderField: "Accept") 
    //print(jsonData) 

    let task = URLSession.shared.dataTask(with: request) { data, responce, error in guard let data = data, error == nil else { 
     print(error?.localizedDescription ?? "No data") 
     return 
     } 
     let responceJSON = try? JSONSerialization.jsonObject(with: data, options: []) 
     if let responceJSON = responceJSON as? [String: Any]{ 
      let s = responceJSON["specialities"] as? NSDictionary 
      let d = s?["items"] as! NSArray 
      for i in d { 
       let f = i as? NSDictionary 
       self.initdata.append((id: f?["id"] as! String, name: f?["name"] as! String)) 
      } 
      print("list", self.initdata) 
     } 
    } 
    task.resume() 
}