我在 Swift 中从 AFNetworking 2.5 迁移到 3.0,并且遇到了 dataTaskWithRequest 方法的问题。此方法位于具有 AFHTTPSessionManager 超类的类中。我从XCode得到的错误是"方法不会覆盖其超类中的任何方法"。
在SessionManager 类中实例化 dataTaskWithRequest 方法的正确方法是什么?
其他 StackOverflow 帖子建议删除"覆盖",但当我这样做时,我收到错误:
"Method 'dataTaskWithRequest(:completionHandler:)'与 Objective-C 选择器 'dataTaskWithRequest:completionHandler:' 与方法 'dataTaskWithRequest(:completionHandler:)' 冲突来自具有相同 Objective-C 选择器的超类 'AFURLSessionManager'
法典:
class SessionManager: AFHTTPSessionManager {
...
func dataTaskWithRequest(request: NSURLRequest!, completionHandler: ((NSURLResponse?, AnyObject?, NSError?) -> Void)) ->
NSURLSessionDataTask! {
if let request = request as? NSMutableURLRequest {
request.setValue(gQuidsiCache.amznSessionID, forHTTPHeaderField: amazonSesionIDHeader)
request.setValue(gQuidsiCache.visitorID, forHTTPHeaderField: legacyVisitorIDHeader)
}
return super.dataTaskWithRequest(request, completionHandler: completionHandler)
}
}
在 Swift 2 中,这应该可以工作:
override func dataTaskWithRequest(request: NSURLRequest, completionHandler: ((NSURLResponse, AnyObject?, NSError?) -> Void)?) -> NSURLSessionDataTask
{
}