我一直在玩Swift并将AFNetworking集成到一个项目中并获得了一些我并不特别满意的代码。
在Apple开发论坛上有already posted并且没有得到回复,我以为我会把它带到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
}
}
}
当我需要改变[weak self]
的{{1}}和if let
变量时,这种方式在闭包中使用error
以及state
语法是否正确?我猜测在关闭执行之前,self
可能已经消失了。我无法使用self
,因为这会产生编译错误。
答案 0 :(得分:3)
使用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
}
更新:我刚刚尝试了可选绑定if var
,它确实可以在测试版5中运行:
if var strongSelf = self {
// ...
}