0
我想聲明一個由後臺線程中執行的塊組成的計算屬性。 所以,當我解決這個屬性時,它是零,因爲計算返回沒有準備好的結果。如何更好地糾正這一點?謝謝!如何在計算使用後臺線程時正確聲明計算屬性?
enum Result<T> {
case error(error: Error)
case success(data: T)
}
var userID: Result<CKRecordID>? {
var result: Result<CKRecordID>? = nil
container.fetchUserRecordID { recordID, error in
if let error = error { result = .error(error: error) }
if let recordID = recordID { result = .success(data: recordID) }
}
return result
}
難道你不使用閉包?所以當讀取用戶返回時,它會執行一個完成的()封閉並返回記錄ID? – arvidurs
您不能異步返回屬性的值。 –
理論上,您可以應用模式來使其等待響應,但異步檢索機制的整體思想是確保您不會阻止主線程等待某種響應。所以,簡短的答案是,你真的不應該使用計算屬性來包裝一個異步方法。只要堅持'fetchUserRecordID'。如果你想用某種方法把它封裝起來,那麼在完成處理程序閉包中返回你的'Result'類型,這很好,但是不要試圖用一個計算屬性來處理。 –
Rob