我有来自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
语句。从搜索互联网,我发现的示例建议在枚举中处理错误类型,但我不知道这将如何适用于此。
答案 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
}
你能从这里拿走吗?