为什么返回值为零并显示错误?

时间:2017-06-09 09:32:14

标签: ios swift3 nsdictionary

func fetchDataForSQL(query : String)->NSDictionary{

    let url = URL(string: "###############################################")
    var jsonDBdata: NSDictionary!
    var request = URLRequest(url: url!)
    request.httpMethod = "POST"
    request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
    request.httpBody = query.data(using: String.Encoding.utf8)
    let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
        if (error != nil){
            print(error!)

        }
        else {
             jsonDBdata = try! JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.allowFragments) as! NSDictionary

            print(jsonDBdata)
        }
    }.resume()

 return jsonDBdata
}

这里如果我在其他部分打印jsonDBdata它正在打印该值,但是当我返回它时,它会显示错误“在解开一个Optional值时意外发现nil”。为什么我不能回到这里?它的范围是什么?

2 个答案:

答案 0 :(得分:0)

在声明时,jsonDBdata为零。您正在使用块URLSession.shared.dataTask执行任务,但您将立即返回jsonDBdata。当您的任务正在执行时,您已返回jsonDBdata(为零)。

所以在else条件下写return jsonDBdata并在错误的情况下返回空的jsonDBdata。

答案 1 :(得分:0)

在这里,您尝试返回值import matplotlib._cntr as cntr import numpy as np # Test data. x = np.linspace(-1, 1, 20) y = np.linspace(-1, 1, 20) x, y = np.meshgrid(x, y) z = x**2 + y**2 - 1 # Function to get points from # the above function can be replaced with any curve equation # conics like ellipse or hyperbola: ((x**2)/a)+((y**2)/b)-1,etc. level = 0 c = cntr.Cntr(x, y, z) nlist = c.trace(level, level, 0) segs = nlist[:len(nlist)//2] print segs[0][0] # x,y coords of contour points. ,其值来自块的完成。所以你需要将函数转换为块/闭包中的返回值。您可以修改为

jsonDBdata