如何在Swift中存储块中的信息?

时间:2016-04-06 16:57:30

标签: swift closures block

基本上,我有一个异步网络功能:

    func networking(callback:NSDictionary -> Void) {


     //stuff happens here



    let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { data, response, error in
        if let error = error {
            print("ERROR: \(error)")
            return
        }
        do {
            let json = try NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments)
            //print(json)
            callback(json as! NSDictionary)

            if let dataDict = json["data"] as? [String:AnyObject],
                let rememberToken = dataDict["remember_token"] as? String {
                    self.rememberToken = rememberToken

                    //print("SUCCESS: \(rememberToken)")
                    // display success label &  make button to get schedules available
            }
        } catch {
            print(error)
        }
    }

    task.resume()
}

我所能做的就是打印(json)数据我要回来了。我真的只想要记住令牌,我将它存储在一个属性中。我遇到的问题是,如果我调用属性,自主线程首先执行后我什么也得不到。如何将属性存储在那里后从属性中访问记忆令牌?

或者我可以将它存放在其他地方吗?

最好的办法是什么?

1 个答案:

答案 0 :(得分:0)

有两种方法可以解决这个问题:

  1. 使用委托和协议

  2. 使用块

  3. 最好是块。

    这两个教程都有大量的教程和SO答案,所以不会在这里提供实现。