【问题标题】:"print array in main thread swift3 Xcode 8"“在主线程 swift3 Xcode 8 中打印数组”
【发布时间】:2017-08-30 03:29:22
【问题描述】:

我不久前学习了swift,我在这个代码打印数组中遇到了一些问题:

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,但这个数组为零。我认为可能是线程问题,但我不知道如何实现这一点。

【问题讨论】:

  • URLSession 是异步的。您在下载 initData 之前很久很久就打印它。请添加一些错误处理。每一个 !是您的应用程序可能崩溃的点。至少学会“如果让”。

标签: arrays multithreading swift3 xcode8


【解决方案1】:

试试这个 -

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()
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 2017-10-05
    • 1970-01-01
    相关资源
    最近更新 更多