如何从“任何”类型访问某些对象?

时间:2016-10-14 05:49:21

标签: ios swift dictionary swift3 xcode8

在Swift 2.2中,我曾经这样写过

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

但是,当AnyObject现在替换为类型Any时,我如何才能访问字典值,因为类型为Any的objectForKey没有方法。 我需要输入强制转换为AnyObject吗?

4 个答案:

答案 0 :(得分:2)

试试这样。

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:),那就太棒了。

答案 1 :(得分:1)

首先,您不能将objectForKey用于swift本机类型。你可以简单地使用我在评论中提到的下标,也可以使用if let for safewrap。

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

注意: 与往常一样,不要在Swift中使用NSMutableDictionary。这种类型缺乏类型信息

答案 2 :(得分:0)

试试这个......

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

答案 3 :(得分:0)

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

subscript只需Dictionary

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