#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 я могу использовать старые методы