Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何处理Swift错误消息?_Swift - Fatal编程技术网

如何处理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

我正试图通过遵循O'Reilly书中的笔记示例来学习Swift,学习Swift。我在一些代码上遇到了一条错误消息,我不知道该如何更正它。代码直接取自本书:

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第四版书。