Ios 作为单独的函数从URL获取数据
我尝试创建从URL获取数据的函数:Ios 作为单独的函数从URL获取数据,ios,swift,function,Ios,Swift,Function,我尝试创建从URL获取数据的函数: func getStringFromUrl(urlString: String) -> String { if let requestURL = URL(string: urlString) { let session = URLSession(configuration: URLSessionConfiguration.default) let task = session.dataTask(with: requ
func getStringFromUrl(urlString: String) -> String {
if let requestURL = URL(string: urlString) {
let session = URLSession(configuration: URLSessionConfiguration.default)
let task = session.dataTask(with: requestURL, completionHandler: { (data, response, error) in
if let data = data {
do {
let str = String(data: data, encoding: String.Encoding.utf8)
return str
}
catch let error as NSError {
print ("error = \(error)")
}
}
else {
print ("error = \(error)")
}
})
task.resume()
}
}
但我得到了这个错误:void函数中意外的非void返回值
如何创建一个单独的函数来从Url获取数据?在您的代码中,您有:
let str = String(data: data, encoding: String.Encoding.utf8)
return str
它位于未定义为返回任何内容的闭包块内。因为函数session.dataTask是一个异步任务,所以它不会立即返回。当响应返回时,应该使用完成块/闭包来获取响应。还要记住,它可能不会返回,因此字符串需要是可选的。请参阅下面的代码
func getStringFromUrl(urlString: String, completion: @escaping (_ str: String?) -> Void) {
if let requestURL = URL(string: urlString) {
let session = URLSession(configuration: URLSessionConfiguration.default)
let task = session.dataTask(with: requestURL, completionHandler: { (data, response, error) in
if let data = data {
do {
let str = String(data: data, encoding: String.Encoding.utf8)
completion(str)
}
catch let error as NSError {
print ("error = \(error)")
completion(nil)
}
}
else {
print ("error = \(error)")
completion(nil)
}
})
task.resume()
}
}
编辑:用法
getStringFromUrl(urlString: "http://google.com") { str in
if let text = str {
// you now have string returned
}
}
从街区,你不能回来。相反,您必须使用完成手册我更新了答案,此问题已标记为重复,因此重复的问题也应回答并告诉您这一点