Swift. Словари. Базовые свойства и методы
From AsIsWiki
Назад · Оглавление · Дальше
Contents |
Количество элементов словаря
var a = [1:"one", 2:"two", 3:"three"] a.count // 3
Определение пустого словаря
var a: [Int:String] = [:] a.count // 0 a.isEmpty // true
Получение всех ключей или значений
var dic = ["RU":"Россия", "GB":"Великобритания", "US":"США"] let keys = dic.keys // Dictionary.Keys(["RU", "US", "GB"]) let values = dic.values // Dictionary.Values(["Россия", "США", "Великобритания"]) type(of: keys) // Dictionary<String, String>.Keys.Type type(of: values) // Dictionary<String, String>.Values.Type
Указанные типы соответствуют протоколу Collection,
и используются для доступа к ключам или значениям исходного словаря:
Set(keys) // {"GB", "US", "RU"} Array(keys) // ["RU", "US", "GB"] Set(values) // {"Россия", "Великобритания", "США"} Array(values) // ["США", "Россия", "Великобритания"]
Вложенные типы данных
Dictionary<T1,T2>.Keys Dictionary<T1,T2>.Values
Типы данных Keys и Values пишутся через точку после типа словаря.
Они реализованы внутри типа Dictionary<T1,T2> и не могут быть использованы вне его контекста:
var a: Values // параметр такого типа создать нельзя, // Values существует только в контексте словаря
Значения типов Keys и Values не представляют интереса отдельно от родительского словаря.
В контексте словаря, данные типы возвращаются в виде обобщенной коллекции,
поскольку заранее неизвестно, в каком виде (Set или Array) они необходимы разработчику.
Пример
Проверка наличия фигуры на шахматной доске:
typealias Chessman = [String: (alpha:Character, num:Int)?] var Chessmans: Chessman = [ "Пешка": ("A", 2), "Ферзь": ("D", 1), "Ладья": nil, ] var name = "Пешка1" if let position = Chessmans[name] { // проверяем наличие key if let pos = position { // проверяем position на nil print("\(name) \(pos.alpha)\(pos.num)") } else { print("Фигура взята.") } } else { print("Фигуры в словаре нет.") }
Назад · Оглавление · Дальше