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”。为什么我不能回到这里?它的范围是什么?
答案 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