Как я могу получить доступ к какому-либо объекту из «любого` типа?

#ios #swift #dictionary #swift3 #xcode8

#iOS #swift #словарь #swift3 #xcode8

Вопрос:

В Swift 2.2 я писал так

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

Но, поскольку AnyObject теперь заменено на type Any , как я могу получить доступ к значениям словаря, поскольку нет метода objectForKey для типа Any.
Нужно ли вводить приведение к AnyObject ?

Комментарии:

1. swift 2.2 также выдает ошибку для значения типа ‘[String: AnyObject]’ не имеет члена ‘objectForKey’

2. вы можете напрямую получить доступ к значению let value = dict[«цена»] как! Двойной

3. просто укажите словарь. пусть dict: [String: Any] = [«цена»: 2.0 ], если пусть value = dict[«цена»] как? Double { print(значение) }

Ответ №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:) and object(for:) .

Ответ №2:

Прежде всего, вы не можете использовать objectForKey для swift собственный тип. вы можете просто использовать нижний индекс, как я упоминал в комментариях, а также использовать if let для безопасного развертывания.

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

Примечание:
Как всегда, не используйте NSMutableDictionary в Swift. в этом типе отсутствует информация о типе

Ответ №3:

Вы не должны использовать objectForKey(_:) метод on NSDictionary . Вплоть до Swift 2.3 вы могли вызывать этот NSDictionary метод в Swift Dictionary , потому что был неявный переход от Swift Dictionary к NSDictionary . В попытке отойти от Foundation типов данных это неявное соединение было удалено в Swift 3. Не было никаких причин использовать его в первую очередь, если вы работаете со Swift Dictionary .

Просто подстрочный индекс Dictionary :

 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)
 

Комментарии:

1. Я больше не хочу использовать AnyObject, мне нужно использовать Any. Да, с AnyObject я могу использовать старые методы