【问题标题】:Swift access data outside closure快速访问闭包外的数据
【发布时间】:2015-05-04 15:43:16
【问题描述】:

我是 iOS 新手。我有疑问,我们如何访问闭包内的数据或变量。以下是我的代码 sn-p。

self.fetchData() { data in
       dispatch_async(dispatch_get_main_queue()) {
            println("Finished request")
            if let data = data { // unwrap your data (!= nil)
            let myResponseStr = NSString(data: data, encoding: NSUTF8StringEncoding) as! String

            }
        }
    }      

我想把 myResponseStr 放到外面,比如 self.myString=myResponseStr

【问题讨论】:

    标签: ios swift


    【解决方案1】:

    您应该在调用fetchData 的函数中使用完成处理程序闭包,例如:

    func fetchString(completionHandler: (String?) -> ()) {
        self.fetchData() { responseData in
            dispatch_async(dispatch_get_main_queue()) {
                println("Finished request")
                if let data = responseData { // unwrap your data (!= nil)
                    let responseString = NSString(data: data, encoding: NSUTF8StringEncoding) as? String
                    completionHandler(responseString)
                } else {
                    completionHandler(nil)
                }
            }
        }      
    }
    

    你会这样称呼它:

    fetchString() { responseString in
        // use `responseString` here, e.g. update UI and or model here
    
        self.myString = responseString
    }
    
    // but not here, because the above runs asynchronously
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多