如何处理Swift错误消息?

时间:2017-12-27 23:12:36

标签: swift

我正在尝试通过遵循O'Reilly书籍Learning Swift中的Note示例来学习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.我怀疑这本书使用的是先前的版本,其中此代码是可以接受的。

这里发生了什么,我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:1)

for (layer in _tiled_map.layers) { if (Std.is(layer, TiledTileLayer)) { var tileLayer:TiledTileLayer = cast layer; var layerData:Array<Int> = tileLayer.tileArray; } } 期望userInfo的类型为NSError.init(domain:code:userInfo:),只需更改您的函数签名以反映这一点,它应该按预期工作。

[String : Any]?