我正在嘗試使用 Swift for IOS 在 React native 中實作本機模塊。
我有一個函式getRandomFoodWithCompletionHandler() 我試圖從 API 中獲取一些東西,然后使用 Promise 通過橋將它發送回 JS。我使用resolve:RCTPromiseResolveBlock函式,但是當我使用它時出現錯誤 Escaping closures capture non-escaping parameter 'resolve'

struct Food: Identifiable, Decodable {
var id: Int
var uid: String
var dish: String
var description: String
var ingredient: String
var measurement: String
}
@objc
func getRandomFoodWithCompletionHandler(_ resolve:RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) {
guard let url = URL(string: "https://random-data-api.com/api/food/random_food") else { fatalError("Missing URL") }
let urlRequest = URLRequest(url: url)
let dataTask = URLSession.shared.dataTask(with: urlRequest) { (data, response, error) in
if let error = error {
print("Request error: ", error)
return
}
guard (response as? HTTPURLResponse)?.statusCode == 200 else { return }
guard let data = data else { return }
do {
let decodedFood = try JSONDecoder().decode(Food.self, from: data)
print("Completion handler decodedFood", decodedFood)
resolve(decodedFood)
} catch {
print("Error decoding", error)
}
}
dataTask.resume()
}
uj5u.com熱心網友回復:
使您的resolve: RCTPromiseResolveBlock引數成為轉義塊:
func getRandomFoodWithCompletionHandler(
_ resolve: @escaping RCTPromiseResolveBlock,
reject: @escaping RCTPromiseRejectBlock
) {
“轉義”塊本質上是一個即使在原始函式已經完成執行時也可以呼叫的塊,例如當它是一個異步完成處理程式時。在 Swift 中,由于記憶體分配/釋放,有必要區分這種情況。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/471660.html
上一篇:如何將completionHandler的結果用于Swift中NavigationLink的目的地?
下一篇:將資料過濾到帶有部分的串列中
