我正在尝试通过遵循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.我怀疑这本书使用的是先前的版本,其中此代码是可以接受的。
这里发生了什么,我该怎么做才能解决这个问题?
答案 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]?