Начало работы
Переменная
``swift var score = 0 // Переменная let pi = 3.14 // Постоянная
var greeting = “Hello” var numberOfToys = 8 var isMorning = true
var numberOfToys: Int = 8 numberOfToys += 1
print(numberOfToys) // печатает “9”
### Аннотации типов
``swift
var greeting: String = "Hello"
var NumberOfToys: Int = 8
var isMorning: Bool = true
var price: Double = 8.99
Арифметические операторы
+
Сложение-
Вычитание*
Умножение/
Деление%
Остаток {.cols-2 .marker-none}
``сдвиг var x = 0 x = 4 + 2 // x теперь равно 6 x = 4 - 2 // x теперь равно 2 x = 4 * 2 // x теперь равно 8 x = 4 / 2 // x теперь 2 x = 4 % 2 // x теперь 0
----
- `+=` Складывает и присваивает суммы
- `-=` Вычитание и присваивание разности
- `*=` Умножение и присваивание
- `/=` Деление и присваивание делителя
- `%=` Деление и присваивание остатка
{.marker-none}
#### Составные операторы присваивания
``swift
var numberOfDogs = 100
numberOfDogs += 1
print("Есть \(numberOfDogs) далматинцев!")
// print: 101 далматинец!
Интерполяция строк
``сдвиг var apples = 6 print(“У меня (яблок) яблок!”)
// print: У меня 6 яблок!
### Многострочная строка
``swift
let myLongString = """
Swift?
Это мой любимый язык!
Да!
"""
Комментарии к коду
``swift // Эта строка представляет собой комментарий в Swift.
/* Здесь все закомментировано. Ни один не будет запущен! */
### Формируем кортеж {.col-span-2}
``swift
let player = ("Maya", 5, 150)
print(player) // ("Maya", 5, 150)
print("\(player.0): уровень \(player.1), \(player.2) pts") // Майя: уровень 5, 150 pts
Разложить кортеж
``swift let player = (name: “Maya”, level: 5) let (currentName, curLevel) = player print("(currentName): level (curLevel)") // print: Майя: уровень 5
### Специальный синтаксис комментария (MARK)
``swift''
// MARK: - настройки вида
MARK
может быть использован для отображения комментариев в колонке
Специальный синтаксис комментариев (TODO)
``swift’' // TODO: обновить логику для учета изменений данных
`TODO` используется для отображения напоминаний о том, что необходимо сделать
### Синтаксис специальных комментариев (FIXME)
``swift''
// FIXME: Исправление ошибок при внесении изменений в существующие записи
FIXME
используется для отображения напоминаний о том, что необходимо исправить
Переменная
Объявление переменной
Переменные объявляются с помощью var
:
``swift var greeting = “Hello” var numberOfToys = 8 var isMorning = true
Для наглядности объявления переменных могут содержать аннотации типов:
``swift
var greeting: String = "Hello"
var NumberOfToys: Int = 8
var isMorning: Bool = true
Переменные являются мутабельными. Их значения могут быть изменены:
``swift var NumberOfToys: Int = 8 numberOfToys += 1
print(numberOfToys) // print “9”
### Константы
Константы объявляются с помощью `let`:
``swift
let greeting = "Hello"
let numberOfToys = 8
let isMorning = true
Для наглядности объявления констант могут содержать аннотации типов:
``swift let greeting: String = “Hello” let NumberOfToys: Int = 8 let isMorning: Bool = true
Константы являются неизменяемыми. Их значения не могут быть изменены:
``swift
let NumberOfToys: Int = 8
numberOfToys += 1
// Ошибка: numberOfToys является неизменяемым
Вычисляемые переменные (get и set)
``swift импорт Foundation
let df = DateFormatter() df.dateFormat = “d MMMM yyyy”
guard var birth = df.date(from: “5 June 1999”) else { print(“Дата не действительна”) return }
var age: Int { Calendar.current .dateComponents([.year], from: birth, to: Date()).year! }
print(age) // 23 guard let birth2 = df.date(from: “5 июня 2002 года”) else { print(“Дата не действительна”) return } birth = birth2 print(age) // 20
В приведенном ниже примере у distanceInFeet есть `getter` и `setter`. Из-за наличия `setter`, для `getter` требуется ключевое слово `get`:
``swift
var distanceInMeters: Float = 100
var distanceInFeet: Float {
get {
distanceInMeters *3.28
}
set(newDistance) {
distanceInMeters = newDistance /3.28
}
}
print(distanceInMeters) // 100.0
print(distanceInFeet) // 328.0
distanceInFeet = 250
print(distanceInMeters) // 76.21951
print(distanceInFeet) // 250.0
distanceInMeters = 800
print(distanceInMeters) // 800.0
print(distanceInFeet) // 2624.0
willSet
``swift var distance = 5 { willSet { print(“Расстояние будет установлено”) } }
distance = 10 // print: distance will be set
Доступ к новому значению можно получить в `willSet`:
``swift
var distance = 5 {
willSet(newDistance) {
print("Расстояние будет установлено \(newDistance)")
}
}
distance = 10 // print: расстояние будет установлено равным 10
willSet
можно использовать для выполнения некоторого кода перед установкой значения переменной
didSet
``сдвиг var distance = 5 { didSet { print(“Расстояние установлено в (distance)”) print(“Его старое значение равно: (oldValue)”) } } distance = 10 // print: distance будет установлено в 10 // print: его старое значение равно: 5
### willSet и didSet
``сдвиг
var distance = 5 {
willSet(newDistance) {
print("Расстояние будет установлено в \(newDistance)")
}
didSet {
print("Расстояние установлено в \(расстояние)")
print("Его старое значение равно: \(oldValue)")
}
}
distance = 10
Условия
оператор if
``swift var halloween = true if halloween { print(“Кошелек или жизнь!”) } // print: Кошелек или жизнь! if 5 > 3 { print(“5 больше 3”) } else { print(“5 не больше 3”) } // вывод: “5 больше 3”
### else statement
``swift
var turbulence = false
if turbulence {
print("Пожалуйста, сядьте.")
} else {
print("Вы можете свободно передвигаться.")
}
// print: Вы можете свободно передвигаться.
else if statement
``swift var погода = “дождливая” if weather == “sunny” { print(“Нанесите солнцезащитный крем”) } else if weather == “rainy” { print(“Возьми зонтик”) } else if weather == “snowing” { print(“Наденьте сапоги”) } else { print(“Неверная погода”) } // print: take a umbrella
### Операторы сравнения
``swift
5 > 1 // true
6 < 10 // true
2 >= 3 // false
3 <= 5 // true
"A" == "a" // false
"B" != "b" // true
-<
меньше чем
->
больше
-<=
меньше или равно
->=
больше или равно
-==
равно
-!=
не равно {.style-round cols-2}
Тернарный условный оператор
``swift var driverLicense = true
driverLicense ? print(“место водителя”) : print(“место пассажира”) // print: водительское место
### оператор switch
``swift
var secondaryColor = "зеленый"
switch secondaryColor {
case "orange":
print("Смесь красного и желтого")
case "purple":
print("Смесь красного и синего")
default:
print("Это не может быть вторичным цветом")
}
// print: смесь синего и желтого
оператор switch: согласование интервалов
``swift пусть год = 1905 var artPeriod: String
switch year { case 1860…1885: artPeriod = “Импрессионизм” case 1886…1910: artPeriod = “Постимпрессионизм” default: artPeriod = “Unknown” } // print: post-impressionism
### оператор switch: составной случай
``swift
let service = "Seamless"
switch service {
case "Uber", "Lyft":
print("travel")
case "DoorDash", "Seamless", "GrubHub":
print("Доставка ресторанов")
case "Instacart", "FreshDirect":
print("Доставка продуктов")
default:
print("Неизвестный сервис")
}
// print: ресторан на вынос
оператор switch: условие where
``swift пусть num = 7
switch num { case let x where x % 2 == 0: print("(num) - четное") case let x where x % 2 == 1: print("(num) нечетное число") по умолчанию: print("(num) недействительно") }
// print: 7 odd
### Логические операторы
``сдвиг
!true // false
!false //true
Логические операторы &&
``сдвиг true && true // true true && false // false false && true // false false && false // false
### Логические операторы ||
``сдвиг
true || true // true
true || false // true
false || true // true
false || false // false
Комбинированные логические операторы
``сдвиг !false && true || false // true
Сначала `!false && true` оценивает и возвращает `true` Затем выражение `true` || `false` оценивает и возвращает конечный результат `true`.
``сдвиг
false || true && false // false
Сначала выражение true && false
возвращает значение false
, затем выражение false
|| false
оценивается и возвращает конечный результат false
.
Управление порядком выполнения
``swift
// без круглых скобок: true || true && false || false //—-> true
// со скобками: (true || true) && (false || false) //—-> false
### Простые охранники
``swift
func greet(name: String?) {
guard let unwrapped = name else {
print("Hello guest!")
return
}
print("Привет \(unwrapped)!")
}
greet(name: "Asma") // output: Hello Asma!
greet(name: nil) // output: Hello guest!
цикл
scope
``сдвиг let zeroToThree = 0…3 //zeroToThree: 0, 1, 2, 3
### функция stride()
``swift
for oddNum in stride(from: 1, to: 5, by: 2) {
print(oddNum)
}
// print: 1
// print: 3
цикл for-in
``swift for char in “hehe” { print(char) } // print: h // print: e // print: h // print: e
### продолжить ключевое слово
``swift
for num in 0...5 {
if num % 2 == 0 {
продолжить
}
print(num)
}
// print: 1
// print: 3
// print: 5
Ключевое слово continue
заставит цикл продолжить работу на следующей итерации
ключевое слово break
``swift for char in “supercalifragilistic” { if char == “c” { break } print(char) } // print: s // print: u // print: p // print: e // print: r
### Используйте символы подчеркивания
``swift
for _ in 1...3 {
print("Ole")
}
// print: Ole
// print: Ole
// print: Ole
цикл while
``сдвиг var counter = 1 var stopNum = Int. random(in: 1…10)
while counter < stopNum { print(counter) counter += 1 } // цикл для печати до тех пор, пока не будет выполнено условие остановки
Цикл `while` принимает условие и продолжает выполнять свой основной код до тех пор, пока заданное условие является `истинным`. Если условие никогда не будет ложным, то цикл продолжит выполняться, и программа застрянет в `бесконечном цикле`.
Массивы и коллекции
----
### Массив
``swift
var scores = [Int]()
// массив пуст: []
Свойство .count
``swift var grocery = [“🥓”, “🥞”, “🍪”, “🥛”, “🍊”] print(grocery.count) // print: 5
### индекс {.row-span-2}
Индекс обозначает позицию элемента в упорядоченном списке, а одиночный элемент извлекается из массива с помощью подстрочного синтаксиса `array[index]`.
``swift
var vowels = ["a", "e", "i", "o", "u"]
print(vowels[0]) // печатает: a
print(vowels[1]) // печатает: e
print(vowels[2]) // print: i
print(vowels[3]) // prints: o
print(vowels[4]) // prints: u
Примечание: массивы Swift имеют нулевую индексацию, то есть первый элемент имеет индекс 0.
Инициализация с помощью литерала массива
``swift’' // используем вывод типов: var snowfall = [2.4, 3.6, 3.4, 1.8, 0.0] // явный тип: var temp: [Int] = [33, 31, 30, 38, 44]
### Метод .append() и оператор +=
``swift
var gymBadges = ["Boulder", "Cascade"]
gymBadges.append("Thunder")
gymBadges += ["Радуга", "Душа"]
// ["Валун", "Каскад", "Гром",
// "Rainbow", "Soul"]
Методы .insert() и .remove()
``swift var moon = [“🌖”, “🌗”, “🌘”, “🌑”] moon.insert(“🌕”, at: 0) // [“🌕”, “🌖”, “🌗”, “🌘”, “🌑”]
moon. remove(at: 4) // [“🌕”, “🌖”, “🌗”, “🌘”]
### Обход массива
``swift
var employees = ["Peter", "Denial", "Jame"]
for person in employees {
print(person)
}
// print: Питер
// print: Отказ
// print: Jam
Коллекция (набор)
``swift var paintingsInMOMA: Set = [ “Сон”, “Звездная ночь”, “Ложное зеркало” ]
Мы можем использовать коллекцию (`Set`) для хранения `уникальных` элементов одного и того же типа данных
### Пустая коллекция (Set)
``swift
var team = Set<String>()
print(team)
// print: []
Пополнение коллекции
``swift var vowels: Set = [“a”, “e”, “i”, “o”, “u”]
Чтобы создать набор, заполненный значениями, используйте ключевое слово `Set` перед оператором присваивания.
### .insert()
``swift
var cookieJar: Набор = [
"Шоколадная крошка",
"Овсяный изюм"
]
// добавляем новый элемент
cookieJar.insert("Peanut Butter Chip")
Методы .remove() и .removeAll()
``swift var oddNumbers: Set = [1, 2, 3, 5]
// удалить существующий элемент oddNumbers.remove(2) // удалить все элементы oddNumbers.removeAll()
### .contains()
```swift
var names: Set = ["Rosa", "Doug", "Waldo"]
print(names.contains("Lola")) // print: false
if names.contains("Waldo"){
print("Вот и Уолдо!")
} else {
print("Где Уолдо?")
}
// print: There's Waldo!
Итерация над коллекцией
``swift var recipe: Набор = [“Яйцо”, “Мука”, “Сахар”]
for ingredient in recipe { print (“Включить (ингредиент) в рецепт”) }
### Свойство .isEmpty
``swift
var emptySet = Set<String>()
print(emptySet.isEmpty) // print: true
var populatedSet: Set = [1, 2, 3]
print(populatedSet.isEmpty) // print: false
Свойство .count
var band: Set = ["Peter", "Denial", "Jame"]
print("В группе \(band.count) игроков.")
// print: В группе 4 игрока.
.intersection() Пересечение
``пересечение var setA: Set = [“A”, “B”, “C”, “D”] var setB: Set = [“C”, “D”, “E”, “F”]
var setC = setA.intersection(setB) print(setC) // print: [“D”, “C”]
### .union()
```swift
var setA: Set = ["A", "B", "C", "D"]
var setB: Set = ["C", "D", "E", "F"]
var setC = setA.union(setB)
print(setC)
// print: ["B", "A", "D", "F", "C", "E"]
.symmetricDifference() Симметричная разность
var setA: Set = ["A", "B", "C", "D"]
var setB: Set = ["C", "D", "E", "F"]
var setC = setA.symmetricDifference(setB)
print(setC)
// print: ["B", "E", "F", "A"]
.subtracting() Вычитание
var setA: Set = ["A", "B", "C", "D"]
var setB: Set = ["C", "D"]
var setC = setA.subtracting(setB)
print(setC)
// print: ["B", "A"]
словарь
Базовый словарь
``swift var dictionaryName = [ “Key1”: “Value1”, “Key2”: “Value2”, “Key3”: “Value3” ]
Неупорядоченная коллекция пар данных или пар ключ-значение
### Ключи
``swift
var fruitStand = [
"Кокосы": 12,
"Ананасы": 12,
"Папайя": 12
]
Каждый ключ
является уникальным
, даже если все они содержат одно и то же значение
.
Согласованность типов
``swift var NumberOfSides = [ “triangle”: 3, “квадрат”: 4, “прямоугольник”: 4 ]
Содержит только ключи `String` и значения `Int`.
### Инициализация и заполнение словаря
``swift
var employeeID = [
"Гамлет": 1367,
"Горацио": 8261,
"Офелия": 9318
]
Инициализация пустого словаря
// Синтаксис инициализатора:
var yearlyFishPopulation = [Int: Int]()
// Синтаксис литерала пустого словаря:
var yearlyBirdPopulation: [Int: Int] = [:]
добавить в словарь
``свифт var pronunciation = [ “library”: “lai-breh-ree”, “apple”: “a-pl” ] // новый ключ: “programming”, новое значение: “prow gra” pronunciation[“programming”] = “prow-gra”
### Удалить пару ключ-значение {.row-span-2}
``swift
var bookShelf = [
"Спокойной ночи": "Маргарет Уайз Браун",
"The BFG": "Roald Dahl",
"Falling Up": "Шел Сильверстайн",
"Нет, Дэвид!": "David Shannon"
]
// удалить значение, установив ключ в nil
bookShelf["The BFG"] = nil
// удаляем значение с помощью функции .removeValue()
bookShelf. removeValue(forKey: "Goodnight")
// удалить все значения
bookShelf. removeAll()
Модифицируем пару ключ-значение
``swift var change = [ “Квартал”: 0.29, “Дайм”: 0.15, “Никель”: 0.05 ]
// Изменение значения с использованием синтаксиса субскриптов change[“Quarter”] = .25
// Изменение значения с помощью функции .updateValue() change.updateValue(.10, forKey: “Dime”)
Для изменения значения пары ключ-значение можно воспользоваться методом `.updateValue()` или синтаксисом subscript, добавив к имени словаря скобки `[ ]` с существующими внутри ключами, затем оператор присваивания _(`= `)_, за которым следует измененное значение
### Свойство .isEmpty
``swift
var bakery = [String:Int]()
// проверяем, пуст ли словарь
print(bakery.isEmpty) // печатает true
bakery["Cupcakes"] = 12
// проверяем, пуст ли словарь
print(bakery.isEmpty) // выводит false
Свойство .count
var fruitStand = [
"Яблоки": 12,
"Апельсины": 17
]
print(fruitStand.count) // print: 2
Присвоение значений переменным
``swift var hex = [ “red”: “#ff0000”, “желтый”: “#ffff00”, “blue”: “#0000ff”, ]
print(“Шестнадцатеричный код синего цвета (hex[“blue”])”) // печать: синий шестнадцатеричный код Optional("#0000ff")
if let redHex = hex[“red”] { print(“красный шестнадцатеричный код (redHex)”) } // print: красный шестнадцатеричный код #ff0000
Присвоение переменной значения пары ключ-значение возвращает опциональное значение. Для извлечения значений используйте расширение optional
### Обход словаря
``swift
var emojiMeaning = [
"🤔": "Задумчивое лицо",
"😪": "Сонное лицо",
"😵": "Головокружение"
]
// перебор ключей и значений
for (emoji, meaning) in emojiMeaning {
print("\(emoji) называется '\(meaning)Emoji'")
}
// итерация только по ключам
for emoji in emojiMeaning. keys {
print(emoji)
}
// итерация только по значениям
for meaning in emojiMeaning. values {
print(meaning)
}
функция
Основные функции
``swift func washCar() -> Void { print(“Мыло”) print(“Скраб”) print(“Ополаскиватель”) print(“Dry”) }
### Вызов функций
``swift
func greetLearner() {
print("Добро пожаловать на CheatSheets.zip!")
}
// вызов функции:
greetLearner()
// print: Welcome to CheatSheets.zip!
возвращаемое значение
``swift var birthYear = 1994 var CurrentYear = 2020
func findAge() -> Int { return currentYear-birthYear }
print(findAge()) // prints: 26
### Множественные параметры {.col-span-2}
``swift
func convertFracToDec(numerator: Double, denominator: Double) -> Double {
return numerator / denominator
}
let decimal = convertFracToDec(numerator: 1.0, denominator: 2.0)
print(decimal) // prints: 0.5
Опустить метки параметров
``swift func findDiff(_ a: Int, b: Int) -> Int { return a -b }
print(findDiff(6, b: 4)) // prints: 2
### возвращает несколько значений {.col-span-2}
``swift
func smartphoneModel() -> (name: String, version: String, yearReleased: Int) {
return ("iPhone", "8 Plus", 2017)
}
let phone = smartphoneModel()
print(phone.name) // print: iPhone
print(phone.version) // print: 8 Plus
print(phone.yearReleased) // print: 2017
Параметры и аргументы
``swift func findSquarePerimet(side: Int) -> Int { return side *4 }
let perimeter = findSquarePerimet(side: 5) print(perimeter) // print: 20
// Параметр: side // Аргумент: 5
### Неявный возврат
``swift
func nextTotalSolarEclipse() -> String {
"8 апреля 2024 🌎"
}
print(nextTotalSolarEclipse())
// print: 8 апреля 2024 года 🌎
Параметры по умолчанию
func greet(person: String = "guest") {
print("Привет \(person)")
}
greet() // Здравствуй гость
greet(person: "Aliya") // Hello Aliya
Входные и выходные параметры
``swift var CurrentSeason = “Зима”
func season(month: Int, name: inout String) { switch month { case 1…2: name = “Winter ⛄️” case 3…6: name = “Весна 🌱” case 7…9: name = “Лето ⛱” case 10…11: name = “Осень 🍂” default: name = “Unknown” } } season(month: 4, name: ¤tSeason)
print(currentSeason) // Весна 🌱
### переменная параметр
``swift
func totalStudent(data: String...) -> Int {
let numStudents = data.count
return numStudents
}
print(totalStudent(data: "Отказ", "Петр"))
// print: 2
Необязательные параметры
``swift func getFirstInitial(from name: String?) -> String? { return name?.first }
Функции могут принимать необязательные типы и возвращать необязательные типы. Если функция не может вернуть разумный экземпляр запрашиваемого типа, она должна возвращать `nil`.
структура
----
### Создание структуры
``swift
struct Building {
var адрес: String
var этажи: Int
init(address: String, floors: Int) {
self.address = address
self.floors = floors
}
}
Структуры или structs используются для программного представления реальных объектов в коде. Структура создается с помощью ключевого слова struct
, за которым следует ее имя, а затем тело, содержащее ее свойства и методы
Значения свойств по умолчанию
``swift struct Car { var numOfWheels = 4 var topSpeed = 80 }
var reliantRobin = Car(numOfWheels: 3)
print(reliantRobin.numOfWheels) // prints: 3 print(reliantRobin.topSpeed) // print: 80
### Создание структурного экземпляра
``swift
struct Person {
var name: String
var возраст: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
}
// Экземпляр Person:
var morty = Person(name: "Peter", age: 14)
init() метод
``swift struct TV { var size: Int var type: String
init(size: Int, type: String) { self.size = size self.type = type } }
Использование класса `TV`
``swift
var newTV = TV(size: 65, type: "LED")
Проверка типа
``swift print(type(of: “abc”)) // print: Строка print(type(of: 123)) // print: 123
### Метод мутации (mutating) {.row-span-2}
``сдвиг
struct Menu {
var menuItems = ["Картофель фри", "Бургеры"]
mutating func addToMenu(dish: String) {
self.menuItems.append(dish)
}
}
Использование класса Menu
``swift var dinerMenu = Menu() dinerMenu.addToMenu(dish: “Toast”) print(dinerMenu.menuItems) // prints: [“Картофель фри”, “Бургеры”, “Тост”]
### Структурные методы
``свифт
struct Dog {
func bark() {
print("Гав")
}
}
let fido = Dog()
fido.bark() // prints: Гав
класс
ссылочный тип (класс)
``swift class Player { var name: String
init(name: String) { self.name = name } }
var player1 = Player(name: “Tomoko”) var player2 = player1 player2.name = “Isabella”
print(player1.name) // Изабелла print(player2.name) // Isabella
### экземпляр класса
``swift
class Person {
var name = ""
var age = 0
}
var sonny = Person()
// sonny теперь является экземпляром Person
init() метод
``swift класс Fruit { var hasSeeds = true var color: String
init(color: String) { self.color = color } }
Использование класса Fruit
``swift
let apple = Fruit(color: "red")
Инициализация класса может быть выполнена с помощью метода init()
и соответствующих свойств инициализации. В методе init()
ключевое слово self
используется для ссылки на реальный экземпляр класса, присваивающий значения свойствам
Атрибуты класса
``swift var ferris = Student()
ferris.name = “Феррис Бюллер” ferris.year = 12 ferris.gpa = 3.81 ferris.honors = false
### Наследуем {.row-span-2}
Предположим, что у нас есть класс BankAccount:
``swift
class BankAccount {
var balance = 0.0
func deposit(amount: Double) {
balance += amount
}
func withdraw(amount: Double) {
баланс -= сумма
}
}
Класс SavingsAccount
расширяет класс BankAccount
.
``swift класс SavingsAccount: BankAccount { varinterest = 0.0
func addInterest() { let interest = balance *0.005 self. deposit(amount: interest) } }
Новый класс `SavingsAccount` (подкласс) автоматически получает все характеристики класса `BankAccount` (суперкласс). Кроме того, класс `SavingsAccount` определяет свойство `.interest` и метод `.addInterest()`.
### Пример
использовать тип данных
``swift
класс Студент {
var name: String
var year: Int
var gpa: Double
var honors: Bool
}
Использование значений свойств по умолчанию
``swift class Student { var name = "" var gpa = 0.0 var honors = false }
### Это пример определения структуры и класса
``swift
struct Resolution {
var width = 0
var height = 0
}
class VideoMode {
var resolution = Resolution()
var interlaced = false
var frameRate = 0.0
var name: String?
}
Определение структуры Resolution
и определение класса VideoMode
описывают только внешний вид Resolution
или VideoMode
, создать экземпляр структуры или класса невозможно:
``swift let resolution = Resolution(width: 1920) let someVideoMode = VideoMode()
Перечислить
----
### Определите перечисление
``swift
enum Day {
случай понедельник
случай вторник
случай среда
четверг
случай пятница
суббота
случай воскресенья
}
let casualWorkday: Day = .friday
Оператор переключения
``swift enum Dessert { case cake(flavor: String) case vanillaIceCream(scoops: Int) case brownie }
let customerOrder: Dessert = .cake(flavor: “Red Velvet”) switch customerOrder { case let .cake(flavor): print(“Вы заказали торт (вкус)”) case .brownie: print(“Вы заказали шоколадный торт”) } // prints: “Вы заказали торт “Красный бархат””
### CaseIterable
``swift
enum Season: CaseIterable {
случай зима
случай весна
лето
случай осень
}
for season in Season.allCases {
print(season)
}
Добавляем соответствие протоколу CaseIterable
для доступа к свойству allCases
, которое возвращает массив всех случаев перечисления
Оригинальное значение
``swift enum Beatle: String { case john paul george ringo }
print(“The Beatles - это (Beatle.john.rawValue).”) // print: The Beatles is john.
### Связанные значения
``swift
enum Dessert {
case cake(flavor: String)
case vanillaIceCream(scoops: Int)
case brownie
}
let order: Dessert = .cake(flavor: "Red Velvet")
метод экземпляра
``swift enum Traffic { лёгкий тяжёлый
mutating func reportAccident() { self = .heavy } }
var currentTraffic: Traffic = .light
currentTraffic. reportAccident() // currentTraffic теперь .heavy
Как и классы и структуры, перечисления могут иметь методы экземпляра. Если метод экземпляра изменяет значение перечисления, то он должен быть помечен как `mutating`.
### Инициализация из примитивного значения
``swift
enum Hello: String {
case english = "Hello"
case japanese = "Hello!"
case emoji = "👋"
}
let hello1 = Hello(rawValue: "Привет!")
let hello2 = Hello(rawValue: "Привет")
print(hello1) // Optional(Hello.japanese)
print(hello2) // nil
Вычисленные свойства
``swift enum ShirtSize: String { case small = “S” case medium = “M” case large = “L” case extraLarge = “XL” var description: String { return “Размер этой рубашки (self.rawValue)” } }
Также см.
----
- [Swift Documentation (Official)](https://www.swift.org/documentation/) _(swift.or)_
- [Язык программирования Swift (официальный)](https://docs.swift.org/swift-book/) _(swift.or)_
- [One-Stop Quick Reference for Swift Developers](https://swiftly.dev/) _(swiftly.dev)_