Стандартная библиотека Swift (iOS/macOS): полный обзор
Стандартная библиотека Swift — это фундаментальный набор типов, протоколов и функций, на котором строится вся разработка под iOS, macOS, watchOS и tvOS. В отличие от многих языков, где стандартная библиотека минималистична, Swift предлагает богатый инструментарий прямо "из коробки". В этой статье мы подробно разберём ключевые компоненты библиотеки, которые используются в повседневной разработке.
Основные типы данных и протоколы
Фундамент библиотеки составляют примитивные типы и протоколы, обеспечивающие единообразие работы с данными.
- Протоколы равенства и сравнения:
Equatable,Comparable,Hashable— позволяют сравнивать и хэшировать объекты. - Протоколы представления:
CustomStringConvertible,CustomDebugStringConvertible— для строкового описания объектов. - Базовые типы:
Int,Double,Bool,String,Character— переопределены для максимальной производительности.
// Пример использования протоколов
struct Person: Equatable, CustomStringConvertible {
let name: String
let age: Int
var description: String {
return "\(name), \(age) лет"
}
}
let alice = Person(name: "Алиса", age: 30)
let bob = Person(name: "Боб", age: 25)
print(alice == bob) // false
print(alice) // "Алиса, 30 лет"
Коллекции: массивы, словари и множества
Swift предоставляет три основных типа коллекций, оптимизированных для разных сценариев использования.
Массивы (Array)
Упорядоченные коллекции с произвольным доступом. Поддерживают динамическое расширение и сокращение.
var numbers: [Int] = [1, 2, 3, 4, 5]
numbers.append(6)
numbers.remove(at: 0)
let filtered = numbers.filter { $0 > 3 }
print(filtered) // [4, 5, 6]
Словари (Dictionary)
Неупорядоченные коллекции "ключ-значение". Ключи должны быть Hashable.
var capitals: [String: String] = [
"Россия": "Москва",
"Франция": "Париж",
"Япония": "Токио"
]
capitals["Германия"] = "Берлин"
if let russiaCapital = capitals["Россия"] {
print("Столица России - \(russiaCapital)")
}
Множества (Set)
Неупорядоченные коллекции уникальных элементов. Идеальны для проверки принадлежности и математических операций.
let setA: Set = [1, 2, 3, 4]
let setB: Set = [3, 4, 5, 6]
let intersection = setA.intersection(setB)
let union = setA.union(setB)
print(intersection) // [3, 4]
print(union) // [1, 2, 3, 4, 5, 6]
Работа со строками
Строки в Swift — это коллекции символов Unicode, что делает работу с интернационализацией максимально простой.
- Индексы строк:
startIndex,endIndex,index(_:offsetBy:)— безопасная навигация по символам. - Интерполяция:
"\(переменная)"— встраивание значений в строку. - Многострочные литералы:
""" """— удобное форматирование.
let greeting = "Привет, мир!"
let firstChar = greeting[greeting.startIndex] // "П"
let index = greeting.index(greeting.startIndex, offsetBy: 7)
let substring = greeting[index...] // "мир!"
// Интерполяция и многострочность
let name = "Свифт"
let description = """
Язык \(name) используется для разработки
под iOS и macOS.
"""
print(description)
Опциональные типы и работа с nil
Swift предлагает безопасную работу с отсутствующими значениями через опциональные типы. Это одна из ключевых особенностей языка.
var optionalName: String? = "Алексей"
// Optional binding
if let name = optionalName {
print("Привет, \(name)!")
} else {
print("Имя не указано")
}
// Nil-coalescing operator
let displayName = optionalName ?? "Гость"
print("Пользователь: \(displayName)")
// Optional chaining
class Address {
var city: String?
}
class Person {
var address: Address?
}
let person = Person()
let city = person.address?.city ?? "Неизвестный