ios – 在Swift闭包中使用[弱自我]和赋值

ios – 在Swift闭包中使用[弱自我]和赋值,第1张

概述我一直在玩 Swift并将AFNetworking集成到一个项目中,并获得了一些我并不特别满意的代码. 在Apple开发论坛上有already posted并没有回复,我想我会把它带到SO … 我的类强烈引用了AFHTTPSessionManager实例,下面的代码片段是一个用于调用GET(_,参数,成功,失败)方法的闭包. let failure = { [weak self] (task: N 我一直在玩 Swift并将AFNetworking集成到一个项目中,并获得了一些我并不特别满意的代码.

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

我的类强烈引用了AFhttpSessionManager实例,下面的代码片段是一个用于调用GET(_,参数,成功,失败)方法的闭包.

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

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

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

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

更新:我刚试过可选的绑定,如果var,它似乎在beta 5中工作:

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

以上是内存溢出为你收集整理的ios – 在Swift闭包中使用[弱自我]和赋值全部内容,希望文章能够帮你解决ios – 在Swift闭包中使用[弱自我]和赋值所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1041731.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-24
下一篇2022-05-24

发表评论

登录后才能评论

评论列表(0条)

    保存