gpt4 book ai didi

ios - 在 Swift 闭包中使用 [weak self] 和赋值

转载 作者:搜寻专家 更新时间:2023-10-31 19:31:47 25 4
gpt4 key购买 nike

我一直在玩弄 Swift 并将 AFNetworking 集成到一个项目中,并且有一些我不是特别满意的代码。

拥有already posted在 Apple 开发论坛上没有得到回复,我想我会把它带到 SO...

我的类具有对 AFHTTPSessionManager 实例的强引用,以下代码段是调用 GET(_, parameters, success, failure) 时使用的闭包方法。

let failure = { [weak self] (task: NSURLSessionDataTask!, error: NSError!) -> (Void) in
if error?.userInfo[AFNetworkingOperationFailingURLResponseErrorKey]?.statusCode == 401 {
if let weakSelf = self {
weakSelf.error = NSError(domain: MyConnectionErrorDomain, code: ErrorCode.InvalidCredentials.toRaw(), userInfo: nil)
weakSelf.state = .Error
}
}
}

当我需要改变 error 时,这种在闭包中使用 [weak self] 以及 if let 语法的方法是否正确和 selfstate 变量?我猜这是因为 self 可能在闭包执行之前就消失了。我不能使用 self?.error = ...,因为这会导致编译器错误。

最佳答案

使用 Xcode 6 beta 5,您现在可以 do assignments via optional chaining .您甚至可以通过检查赋值的返回值来检查赋值是否完成:

if (self?.error = NSError(domain: MyConnectionErrorDomain, code: ErrorCode.InvalidCredentials.toRaw(), userInfo: nil)) == nil {
// `self` became nil in the meantime
}

更新:我刚刚尝试了可选绑定(bind) if var,它似乎在 beta 5 中有效:

if var strongSelf = self {
// ...
}

关于ios - 在 Swift 闭包中使用 [weak self] 和赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24126295/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com