Swift 2中明确的老式错误处理

laz*_*rev 6 ios swift2

Apple在Swift 2中引入了新的错误处理方式

https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/ErrorHandling.html#//apple_ref/doc/uid/TP40014216-CH7-ID10

我正在使用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)