【问题标题】:How can I access some object from `Any` Type?如何从 `Any` 类型访问某些对象?
【发布时间】:2017-02-23 10:49:12
【问题描述】:

在 Swift 2.2 中,我以前是这样写的

let dict = [String: AnyObject]()
let value = dict.objectForKey("price") as! Double
print(value)

但是由于AnyObject 现在已替换为Any 类型,我如何访问字典值作为objectForKey 类型Any 的没有方法。 我需要将类型转换为AnyObject吗?

【问题讨论】:

  • swift 2.2 也为类型“[String : AnyObject]”的值有错误没有成员“objectForKey”
  • 可以直接访问值 let value = dict["price"] as!双
  • 只为字典下标。让 dict: [String: Any] = ["price": 2.0 ] if let value = dict["price"] as?双{打印(值)}

标签: ios swift dictionary swift3 xcode8


【解决方案1】:

像这样试试。

let dict: [String: Any] = ["value1":1.5,"value2":2.5]
if let value = dict["value1"] as? Double {
    print(value)
}

检查IBM Swift Sandbox 以运行演示。

注意:在 Swift 中,如果您使用 subscript 而不是 value(for:)object(for:),则会很糟糕。

【讨论】:

    【解决方案2】:

    首先,您不能将objectForKey 用于 swift 本机类型。你可以简单地使用我在 cmets 中提到的下标,也可以使用 if let 来安全地展开。

     let dict: [String: Any] = ["price": 2.0 ]
     if let value = dict["price"] as? Double {
      print(value)
    }
    

    注意: 一如既往,不要在 Swift 中使用 NSMutableDictionary。此类型缺少类型信息

    【讨论】:

      【解决方案3】:

      您不应该使用objectForKey(_:)NSDictionary 上的一种方法。在 Swift 2.3 之前,您可以在 Swift Dictionary 上调用此 NSDictionary 方法,因为从 Swift 的 DictionaryNSDictionary 之间存在隐式桥接。为了摆脱 Foundation 数据类型,在 Swift 3 中删除了这种隐式桥接。如果您正在使用 Swift 的 Dictionary,则没有理由首先使用它。

      只需subscriptDictionary

      let dict: [String: Any] = ["name": "apple", "price": 1.0]
      let value = dict["price"] as! Double
      

      【讨论】:

        【解决方案4】:

        试试这个...

        let dict :  [String: Any] = [:]
        let value = dict["price"] as! Double
        print(value)
        

        【讨论】:

        • 我不想再使用 AnyObject 我需要使用 Any。是的,AnyObject 我可以使用旧方法
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-03-06
        • 2013-05-28
        • 2015-10-14
        • 2013-08-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多