【问题标题】:How to store response from dataTaskWithUrl in other variable?如何将来自 dataTaskWithUrl 的响应存储在其他变量中?
【发布时间】:2016-04-20 13:49:45
【问题描述】:

我正在尝试使用完成处理程序将数据存储在 dataTaskWithUrl 之外以与其他方法一起使用。

这是我的代码:

import UIKit
import XCPlayground

XCPSetExecutionShouldContinueIndefinitely(true)

let session = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration())
var jsonData : NSDictionary
let urlString = "<my_rest_api>"
session.dataTaskWithURL(NSURL(string: urlString)!, completionHandler: {
    (taskData, taskResponse, taskError) -> Void in
    var jsonReadError: NSError?
    var jsonResult = try! NSJSONSerialization.JSONObjectWithData(taskData!, options: NSJSONReadingOptions.MutableContainers) as! NSDictionary

    var resp=jsonResult["response"] as! String
    var data: NSData = resp.dataUsingEncoding(NSUTF8StringEncoding)!
    var jsonResultNested = try! NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers) as! NSArray
    dispatch_async(dispatch_get_main_queue(), {
        jsonData = jsonResultNested[0] as! NSDictionary
    })

}).resume()

当我在外面打印jsonData 时,它说

错误:变量“jsonData”在初始化之前使用

如何使用完成处理程序做到这一点?

【问题讨论】:

    标签: ios json swift


    【解决方案1】:

    仔细阅读,你就明白jsonData还没有初始化的问题。

    jsonData 仅在您的代码中的异步块中初始化。为了解决您的问题,请为var jsonData = [String: String]()等属性设置默认值

    【讨论】:

    • 谢谢,但这样做不会将jsonResultNested[0] 的响应存储在jsonData 中。
    • 这只是示例 var jsonData = [String: String]() 您需要使用正确的键值类型初始化 NSDictionary
    【解决方案2】:

    这是因为你没有初始化jsonData,而你的dataTaskWithURL是异步方法,你不能保证它会在你访问完成处理程序之外的jsonData对象之前运行。

    现在有两个选项,要么初始化它,要么让它保持可选状态,并在访问之前检查它是否不为零。

    选项 1。 在开始时对其进行初始化。

     var jsonData : NSDictionary = NSDictionary()
    

    选项2。标记是可选的,使用前检查它是否有价值

    var jsonData : NSDictionary?
    .
    .
    .
    and where you are accessing it outside the block do this
    if let dictionary = jsonData {
        // inside this access your jsonData
    }
    

    通过上述操作将消除编译器错误,但在这两种情况下,您都会发现它没有任何数据(emptynil),因为数据将在dataTaskWithURL 完成执行后分配并调用您的完成处理程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-08
      • 2021-01-24
      • 2013-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多