[英]How to use a escaping closure in a func to return some data?
在我的代碼中,我想在網絡請求后返回一些數據。
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 closure
, data
將始終是"demo"
。
那么如何在網絡請求完成后返回數據而不修改 function funcName
的參數?
如果不修改function的參數。
我是 swift 的新手,真的很茫然。如果你能幫助我,非常感謝!
您還必須將funcName
修改為完成closure
,而不是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)
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.