Ios 如何在func中使用转义闭包返回一些数据?
在我的代码中,我希望在网络请求后返回一些数据Ios 如何在func中使用转义闭包返回一些数据?,ios,swift,closures,swift5,Ios,Swift,Closures,Swift5,在我的代码中,我希望在网络请求后返回一些数据 func funcName()->String{ var data = "demo" DataLoader.fetch { result in if case .success(let fetchedData) = result { data = fetchedData } else {
func funcName()->String{
var data = "demo"
DataLoader.fetch { result in
if case .success(let fetchedData) = result {
data = fetchedData
} else {
data = "Fail"
}
}
return data
}
DataLoader用于从API获取一些数据,代码如下:
struct DataLoader {
static func fetch(completion: @escaping (Result<String, Error>) -> Void) {
let url = URL(string: "URL LINK")!
let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
guard error == nil else {
completion(.failure(error!))
return
}
completion(.success(data!))
}
task.resume()
}
}
结构数据加载器{
静态函数获取(完成:@escaping(Result)->Void){
让url=url(字符串:“url链接”)!
让task=URLSession.shared.dataTask(带:url){(数据、响应、错误)在
保护错误==nil else{
完成(.failure(error!))
返回
}
完成(.success(数据!))
}
task.resume()
}
}
但正如您所知,由于转义闭包
,数据总是的“demo”
那么,在网络请求完成后,如何在不修改函数funcName
的参数的情况下返回数据呢
如果未修改函数的参数。 我是swift的新手,真是不知所措。如果你能帮我的话,非常感谢
您还必须将
funcName
修改为completionclosure
,而不是return
func funcName(completion: @escaping (String) -> Void) {
var data = "demo"
DataLoader.fetch { result in
if case .success(let fetchedData) = result {
data = fetchedData
} else {
data = "Fail"
}
completion(data)
}
}
使用方法:
funcName { name in
print(name)
}
但正如您所知,数据将始终是“演示”的,因为要逃避闭包。。数据将被演示,因为它将在网络请求完成并调用关闭之前返回值。这是否回答了您的问题?你需要做一个“逃跑”动作!谢谢,伙计。是的,我知道,但我只想保留
funcName
的参数,使其成为一个覆盖函数。请解释你问题中“我只想保留funcName的参数,使其成为一个覆盖函数”的意思。如果函数的参数没有修改。