我有一个带有字符串键的字典,它包含不同类型的值。它是从plist文件加载的。我想将字典中的值分配给变量。出于某种原因,我需要两行来将值转换为具体类型。例如,此代码有效:
var stockItemData: [String: AnyObject]
var typeTemp: AnyObject? = stockItemData["type"]
var type = typeTemp as String
虽然这不起作用:
var stockItemData: [String: AnyObject]
var type = stockItemData["type"] as String
这里编译器给出了错误消息(String,AnyObject)不能转换为String。但显然它能够进行强制转换,因为上面的代码可以在两行代码中完成同样的工作。
有人可以向我解释,为什么会这样?还有更优雅的方法吗?
答案 0 :(得分:3)
原因是因为String不符合AnyObject,但NSString符合。当你通过两个步骤完成它时,swift能够将未知的AnyObject转换为NSString,然后将其桥接到swift字符串。有几种方法可以解决这个问题。
最简单的方法是将字典设为[String : Any]
。由于String符合Any,因此可以将Any转换为String。
var stockItemData: [String: Any] = ["type": "hello"]
var type = stockItemData["type"] as String
如果您无法更改字典的类型,您仍然可以在一行中执行两步操作,并且无需使用临时变量。
var stockItemData: [String: AnyObject] = ["type": "hello"]
var type = stockItemData["type"] as AnyObject? as String