2015-07-19 32 views
1

从iOS 9.0开始,NSURLSession#dataTaskWithRequest可能会返回NSURLSessionDataTask?,之前它总是返回NSURLSessionDataTask。 Swift迁移只是建议只需添加一个!来强制解包任务。但是这仍然让我想知道为什么会发生这种变化。如果返回nil,这实际上意味着什么?任务的条件不能构成?在应用程序中处理这些错误的最佳方法是什么?如果NSURLSession#dataTaskWithRequest返回nil,意味着什么?

let task = NSURLSession.sharedSession().dataTaskWithRequest(request) 
// Swift migrator suggests force unwrapping the optional 
let task = NSURLSession.sharedSession().dataTaskWithRequest(request)! 

的iOS 8.3

- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request 
- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request completionHandler:(void (^)(NSData *data, NSURLResponse *response, NSError *error))completionHandler 

的iOS 9.0

- (NSURLSessionDataTask * nullable)dataTaskWithRequest:(NSURLRequest * nonnull)request 
- (NSURLSessionDataTask * nullable)dataTaskWithRequest:(NSURLRequest * nonnull)request completionHandler:(void (^ nonnull)(NSData * nullable data, NSURLResponse * nullable response, NSError * nullable error))completionHandler 

https://developer.apple.com/library/prerelease/ios/releasenotes/General/iOS90APIDiffs/frameworks/Foundation.html

回答

1

看起来这是在API中的错误。截至目前在问题中的差异显示

- (NSURLSessionDataTask * _Nonnull)dataTaskWithRequest:(NSURLRequest * _Nonnull)request