我有一個需要轉義完成閉包的函式:
func doTheWork(completion: () -> Void) {
process { [weak self] in
guard let self = self else {
return
}
completion()
}
}
問題是,如果weak self結果是nil,completion()以前仍然打電話很常見return嗎?我想這取決于場景,我只是在一般地思考,如果物件本身是nil在呼叫閉包時,通知作業已經完成的意義何在?另一方面,如果物件的用戶不在nil而物件本身nil出于某種原因,則物件的用戶應該仍然知道作業已經(未)完成,這意味著完成閉包應該指示作業是否已經結束了,大概是在Bool爭論吧?
謝謝!
uj5u.com熱心網友回復:
這取決于你的目的。如果您只想停止沒有回呼的程序,您可以這樣做。如果你想區分成功或失敗,你可以通過 Bool 或 Error 回傳。
func doTheWork(completion:@escaping((_ success:Bool)->Void)) {
process { [weak self] in
guard let self = self else {
completion(false)
return
}
completion(true)
}
}
func printJsonStr(_ jsonUrl:URL,completion:@escaping((_ error:Error?)->Void)) {
do {
let data = try Data(contentsOf: jsonUrl)
} catch {
completion(error)
}
completion(nil)
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/409032.html
標籤:
上一篇:Xcode13:鎖定視圖方向
