苹果在Swift 2中引入了新的高级错误处理机制。
我正在处理一个使用AFNetworking v2.x的项目,其中AFHTTPRequestSerializer有两个选择器:
- (NSMutableURLRequest *)requestWithMethod:(NSString *)method
URLString:(NSString *)URLString
parameters:(id)parameters DEPRECATED_ATTRIBUTE;
- (NSMutableURLRequest *)requestWithMethod:(NSString *)method
URLString:(NSString *)URLString
parameters:(id)parameters
error:(NSError * __autoreleasing *)error;
First 已经被弃用,但是 Swift 2 编译器会自动将第二个转换为第一个签名。现在不允许使用老式的方法:
var error: NSError?
let request = self!.operationManager.requestSerializer.requestWithMethod(method, URLString: url?.absoluteString, parameters: params, error: error)
给我一个编译时错误:
Cannot convert value of type 'NSError?' to expected argument type '()'
但是全新的符号表示法把带有错误处理的选择器降级为不带错误处理的过时变体。
do {
let request = try
self!.operationManager.requestSerializer.requestWithMethod(method, URLString: url?.absoluteString, parameters: params)
} catch let error as NSError {
// ...
}
在Swift 2中,解决这个问题的最佳实践是什么?在这种情况下是否有指定特定选择器的方法?
更新:更精确地链接到导致我的问题的Swift 2功能。 https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/BuildingCocoaApps/AdoptingCocoaDesignPatterns.html#//apple_ref/doc/uid/TP40014216-CH7-ID10