【发布时间】:2018-09-14 15:22:01
【问题描述】:
我需要在另一个视图控制器中使用输出数据但我不能使用,字符串只返回一个空字符串:
func callApi(postString: String) -> (String) {
var outputdata = String()
var req = LogIn(postString: postString)
let task = URLSession.shared.dataTask(with: req) { (data, response, error) in
if let data = data{
outputdata = String(data: data, encoding: String.Encoding.utf8)!
//print(outputdata)
}
}
print(outputdata)
return (outputdata)
}
【问题讨论】:
-
您确定请求不会失败吗?读取数据不是空字符串编码?
-
你需要恢复任务才能得到结果.. 'task.resume()' 这是异步请求,所以你不能在这里使用return,而是使用闭包。
-
您缺少的概念是“异步”。如果你用
print("In the dataTask() closure: \(outputdata)")代替//print(outputdata),用return代替print(outputdata)(就在return之前),你会发现打印的顺序不是你认为的那个。寻找“Swift + Closure + Async”来管理它。