4
我一直在玩Swift,並將AFNetworking集成到一個項目中,並得到了一些我並不特別滿意的代碼。在Swift中使用[weak self]和賦值
有在蘋果開發論壇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
}
}
}
是與if let
語法正確的,當我需要的突變的self
和error
變量state
沿封閉使用[weak self]
的這種方式?我猜這是因爲self
可能在關閉執行前消失了。我不能使用self?.error = ...
,因爲這會導致編譯器錯誤。
是的,這就是它。如果您只是閱讀屬性,則可以使用可選鏈接,但不能通過鏈接進行書寫。 –