我有以下来自 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 首先建议删除指针,然后说
"Cannot convert value of type 'AnyObject?' to expected argument type 'AutoreleasingUnsafeMutablePointer (...)"
此外,我不确定如何处理 error?.domain
语句。通过搜索互联网,我发现的示例建议在枚举中处理错误类型,但我看不出这将如何适用于此处。
顺便说一句,是否可以使用当前版本的 Xcode 将这段代码从 Swift 1.2 更新到 2.0?
最佳答案
以下是您尝试执行的操作的最小工作示例:
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
}
你能从这里拿走吗?
关于ios - Swift 2 中的错误域处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36559542/