如何处理Swift错误消息?
我正试图通过遵循O'Reilly书中的笔记示例来学习Swift,学习Swift。我在一些代码上遇到了一条错误消息,我不知道该如何更正它。代码直接取自本书:如何处理Swift错误消息?,swift,Swift,我正试图通过遵循O'Reilly书中的笔记示例来学习Swift,学习Swift。我在一些代码上遇到了一条错误消息,我不知道该如何更正它。代码直接取自本书: let ErrorDomain = "NotesErrorDomain" func err(_ code: ErrorCode, _ userInfo:[AnyHashable: Any]? = nil) -> NSError { // Generate an NSError object, using Er
let ErrorDomain = "NotesErrorDomain"
func err(_ code: ErrorCode,
_ userInfo:[AnyHashable: Any]? = nil) -> NSError {
// Generate an NSError object, using ErrorDomain, and using whatever
// value we were passed
return NSError(domain: ErrorDomain,
code: code.rawValue,
userInfo: userInfo)
}
Xcode在return语句上发出错误信号。错误的文本是
无法将类型“[AnyHashable:Any]”的值转换为预期的参数类型“[String:Any]”
它通过插入as!来修复错误![String,Any]
但当我接受该选项并更改行时,它现在会发出警告。看看NSError的定义,第三个参数实际上应该是[String,Any]
。然而,在更改代码后,我收到警告的事实告诉我,有些事情仍然是正确的,将[AnyHashable,Any]
转换为[String,Any]
并不是很直接
注意,我将Xcode 9与Swift 4一起使用。我怀疑这本书使用的是以前的版本,其中的代码是可以接受的
这里发生了什么,我应该做什么来纠正这个问题?NSError.init(域:code:userInfo:)
希望userInfo的类型是[String:Any]?
只需更改函数签名来反映这一点,它就可以正常工作
let ErrorDomain = "NotesErrorDomain"
func err(_ code: ErrorCode,
_ userInfo:[String: Any]? = nil) -> NSError {
// Generate an NSError object, using ErrorDomain, and using whatever
// value we were passed
return NSError(domain: ErrorDomain,
code: code.rawValue,
userInfo: userInfo)
}
你的意思是
n错误初始值设定项<代码>错误
是一个协议,没有初始值设定项。@LeoDabus是!接得好!如果你开始学习Swift,你应该选择一本更好/更新的书。在Swift中编码时,您根本不会使用NSError。我建议首先阅读苹果的Swift第四版书。