- 12.01.2015 6:42
- ← Назад к списку
В Swift есть два типа хранения наборов значений - это Массивы и Словари. Массив и Словарь в Swift реализованы как универсальные коллекции.
Массивы в Swift строго типизированы, и всегда точны по поводу типов которые они могут хранить. Если Вы создали массив из float чисел, то в этот массив нельзя будет вставить значения отличные от float. Массив может быть объявлен как переменная ( с помощью var ) или константа ( с помощью let ). Мы можем не писать тип для массива, который инициализируем с помощью литерала массива, инициализация может быть записана в сокращенной форме.
//инициализация массива содержащего значения типа String var arrMonth: [String] = ["January", "February", "March"] // еще одна форма инициализации var arrMonth = ["January", "February", "March"] // можно задать пустой массив определенного типа var emptyInts = [Int]() // количество элементов в массиве можно узнать с помощью свойства count println("Count in array: \(arrMonth.count)") // свойство isEmpty можно использовать в качестве проверки на пустоту массива if arrMonth.isEmpty { println("Is empty.") } else { println("Is not empty.") } // свойство append позволяет добавить значение в массив arrMonth.append("April") // += еще один способ добавить элементы в массив arrMonth += ["May", "June"] // Выведет March println("Third item: \(arrMonth[2])" // удаляет последний элемент массива, кроме того сохраняет в lastItem значение этого элемента let lastItem = arrMonth.removeLast() // заменит значение в массиве с индексом 0 на September arrMonth[0] = "September" // зменения диапазона значений за раз arrMonth[2...4] = ["May", "June"] // вставляет элемент внутрь массива по указанному индексу arrMonth.insert("January", atIndex: 0) // можно удалить элемент по указанному индексу, при этом возвращается удаленный элемент let first = arrMonth.removeAtIndex(0) // инициализатор для создания массива определенного размера, со всеми значениями установленными в указанное значение по умолчанию var arrInt = [Int](count: 3, repeatedValue: 7)
Массивы в Swift всегда начинаются с 0. Вы можете создать новый массив путем сложения вместе двух существующих массивов соответствующего типа, используя оператор сложения ( +).
Вы можете выполнить итерацию по всему набору значений внутри массива с помощью цикла for-in
. Если вам нужен целочисленный индекс каждого значения так же как и самое значение, используйте вместо этого глобальную функцию enumerate
для итерации по массиву.
for item in arrMonth { println(item) } for (index, value) in enumerate(arrMonth) { println("Index: \(index) Item: \(value)") }
Словари в Swift конкретны по отношению к типам ключей и значений которые они могут хранить. Они отличаются от классов NSDictionary и NSMutableDictionary из Objective-C, которые могут использовать любой объект в качестве ключей и значений, и не предоставляют никакой информации о характере этого объекта.
// создаем словарь, где [String: String] задает тип ключа и через : тип значения в словаре var dicMonth: [String: String] = ["first": "January", "second": "February"] // [String: String] при записи через литералы можно и не писать var dicMonth: = ["first": "January", "second": "February"] // можно создать пустой словарь с заданном типом ключей и значений var namesOfIntegers = [Int: String]() // можем добавить элемент в словарь dicMonth["third"] = "March" // метод updateValue обновит значение при ключе third и вернет старое значение либо nil если значения не было let oldValue = dicMonth.updateValue("April", forKey: "third") // получим значение из словаря для конкретного ключа if let thirdItems = dicMonth["third"] { println("Is \(thirdItems).") } else { println("Is not in dictionary.") } // удалим значение для конкретного ключа dicMonth["third"] = nil // removeValueForKey метод удаляет пару ключ-значение если она существует и затем возвращает значение , либо возвращает nil если значения не существует let removedValue = dicMonth.removeValueForKey("third") // таким способом можно вернуть массив всех ключей или всех значений словаря let monthCodes = [String](dicMonth.keys) let monthNames = [String](dicMonth.values)
Свойства isEmpty
и count
применимы к словарям в Swift аналогично таким же свойствам в массивах.
Можно сделать итерацию по парам ключ-значение в словаре с помощью for-in
цикла.
for (monthCode, monthName) in dicMonth { println("Key: \(monthCode) Item: \(monthName)") }