Swift: 当weak self 为nil 时,completion closure 是否应该有错误指示?
Swift: should completion closure have error indication when weak self is nil?
我有一个函数需要一个转义完成闭包:
func doTheWork(completion: () -> Void) {
process { [weak self] in
guard let self = self else {
return
}
completion()
}
}
问题是如果weak self
结果是nil
,在return
之前仍然调用completion()
是不是很常见?我想这取决于场景,我只是在一般情况下思考,如果调用闭包时对象本身是 nil
,通知工作已完成有什么意义?另一方面,如果对象的用户不是 nil
而对象本身是 nil
无论出于何种原因,对象的用户仍然应该知道工作已经(未)完成,所以这意味着完成闭包应该指示工作是否已完成,可能带有 Bool
参数?
谢谢!
这取决于你的目的。
如果你只是想在没有回调的情况下停止进程,你可以这样做。
如果你想区分成功或失败,你可以return通过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)
}
我有一个函数需要一个转义完成闭包:
func doTheWork(completion: () -> Void) {
process { [weak self] in
guard let self = self else {
return
}
completion()
}
}
问题是如果weak self
结果是nil
,在return
之前仍然调用completion()
是不是很常见?我想这取决于场景,我只是在一般情况下思考,如果调用闭包时对象本身是 nil
,通知工作已完成有什么意义?另一方面,如果对象的用户不是 nil
而对象本身是 nil
无论出于何种原因,对象的用户仍然应该知道工作已经(未)完成,所以这意味着完成闭包应该指示工作是否已完成,可能带有 Bool
参数?
谢谢!
这取决于你的目的。 如果你只是想在没有回调的情况下停止进程,你可以这样做。 如果你想区分成功或失败,你可以return通过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)
}