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)
}