【发布时间】:2016-04-03 21:46:52
【问题描述】:
我一直在玩NSDecimalNumber,当我创建一个扩展时,突然间我收到了这个错误:
'ErrorType' 不能转换为 'NSError';你的意思是用'as!'强制沮丧?
但是当我按照建议使用as! 时,我收到了警告:
从 'NSMutableDictionary!' 强制转换到 '[NSObject : AnyObject]' 总是成功的;你的意思是用'as'吗?
最终改成as?给了我:
从 'ErrorType' 到 'NSError' 的条件转换总是成功
我创建的扩展是:
extension String {
var decimalValue: NSDecimalNumber? {
let number = NSDecimalNumber(string: self)
return number == NSDecimalNumber.notANumber() ? nil : number
}
}
导致错误的代码是:
lazy var persistentStoreCoordinator: NSPersistentStoreCoordinator = {
let coordinator = NSPersistentStoreCoordinator(managedObjectModel: self.managedObjectModel)
let url = self.applicationDocumentsDirectory.URLByAppendingPathComponent(self.storeFile)
var failureReason = "There was an error creating or loading the application's saved data."
do {
try coordinator.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: url, options: nil)
} catch {
var dict = [String: AnyObject]()
dict[NSLocalizedDescriptionKey] = "Failed to initialize the application's saved data"
dict[NSLocalizedFailureReasonErrorKey] = failureReason
---> dict[NSUnderlyingErrorKey] = error as NSError <---
let error = NSError(domain: "YOUR_ERROR_DOMAIN", code: 9999, userInfo: dict)
NSLog("Unresolved error \(error), \(error.userInfo)")
abort()
}
return coordinator
}()
当我更改扩展名时,此错误将消失:
var decimalValue: NSDecimalNumber? {
return NSDecimalNumber(string: self)
}
我应该如何制作这个扩展而不会收到这个烦人的警告/错误?
【问题讨论】:
-
你试过 } catch let error as NSError { 而不是 dict[NSUnderlyingErrorKey] = error as NSError 吗?
标签: swift error-handling nsdecimalnumber