【问题标题】:Cast value of type AnyObject contained in Dictionary字典中包含的 AnyObject 类型的强制转换值
【发布时间】:2014-07-27 23:06:18
【问题描述】:

我有一个带有字符串键的字典,其中包含不同类型的值。它是从 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) is not convertible to String。但是显然它能够进行强制转换,因为上面的代码在两行代码中执行相同的操作。

谁能给我解释一下,为什么会这样?还有更优雅的方法吗?

【问题讨论】:

    标签: casting swift


    【解决方案1】:

    原因是因为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
    

    【讨论】:

      猜你喜欢
      • 2012-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-06
      • 1970-01-01
      • 2018-03-05
      • 1970-01-01
      相关资源
      最近更新 更多