Apple在Swift 2中引入了新的错误处理方式
我正在使用AFNetoworking v2.x的项目,其中AFHTTPRequestSerializer有2个选择器:
- (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;
Run Code Online (Sandbox Code Playgroud)
第一个被弃用,但第二个被Swift 2编译器自动转换为第一个签名.现在不允许使用老式方法:
var error: NSError?
let request = self!.operationManager.requestSerializer.requestWithMethod(method, URLString: url?.absoluteString, parameters: params, error: error)
Run Code Online (Sandbox Code Playgroud)
给我一个编译时错误:
Cannot convert value of type 'NSError?' to expected argument type '()'
Run Code Online (Sandbox Code Playgroud)
但是全新的表示法将选择器与错误处理减少到没有它的弃用变体.
do {
let request = try
self!.operationManager.requestSerializer.requestWithMethod(method, URLString: url?.absoluteString, parameters: params)
} catch let error as NSError {
// ...
}
Run Code Online (Sandbox Code Playgroud)
Swift 2中的最佳实践是什么来解决这个问题?在这种情况下有没有办法指定某个选择器?
UPD:关于Swift 2功能的更精确链接成为我问题的原因.https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/BuildingCocoaApps/AdoptingCocoaDesignPatterns.html#//apple_ref/doc/uid/TP40014216-CH7-ID10
Abh*_*bhi -1
Swift 2 更喜欢只为必要的方法提供 Try Catch 块。因此,如果您的方法存在可能需要错误处理的情况,则仅提供此块。
do {
try managedObjectContext.save()
} catch {
// Replace this implementation with code to handle the error appropriately.
// abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
let NSError = error as NSError
NSLog("Unresolved error \(nserror), \(nserror.userInfo)")
abort()
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
285 次 |
| 最近记录: |