Swift 2中的错误域处理

时间:2016-04-11 21:27:09

标签: ios swift validation core-data error-handling

我有来自Swift 1.2教程的以下代码,我无法将其转换为Swift 2:

var val: AnyObject? = self.value
var error: NSError?
if !self.myManangedObject.validateValue(&val, forKey: self.key, error: &error) {
    var message: String!
    if error?.domain == "NSCocoaErrorDomain" {
        var userInfo:NSDictionary? = error?.userInfo
        var errorKey = userInfo?.valueForKey("NSValidationErrorKey") as String
        var reason = error?.localizedFailureReason
        message = NSLocalizedString("Validation error on \(errorKey)\rFailure Reason:\(reason)", comment: "Validation error on \(errorKey)\rFailure Reason: \(reason)")
    } else {
        message = error?.localizedDescription
    }
    // Create some alerts with the message
}

第一行中的self.value引用CoreData属性的值。

我知道我需要将代码更改为do { try } catch { }构造。我猜第3行看起来像这样:

try self.myManagedObject.validateValue(&val, forKey: self.key) 

然而,这不起作用,因为Xcode首先建议删除指针,然后说

  

“无法转换'AnyObject'类型的值?'预期的参数类型   'AutoreleasingUnsafeMutablePointer(...)“

另外,我不知道如何处理error?.domain语句。从搜索互联网,我发现的示例建议在枚举中处理错误类型,但我不知道这将如何适用于此。

是的,是否可以使用当前版本的Xcode将此代码从Swift 1.2更新为2.0?

1 个答案:

答案 0 :(得分:1)

以下是您尝试执行的操作的最小工作示例:

var mgc : NSManagedObjectContext!
var any : AnyObject?

do {
    let valid = try mgc.validateValue(&any, forKey: "myKey")
    // branch based on the valid
} catch let error as NSError {
    // here you go with your error handling
}

你能从这里拿走吗?