【发布时间】:2016-08-02 06:07:52
【问题描述】:
我有以下来自 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?
【问题讨论】:
标签: ios swift validation core-data error-handling