Swift
к.т.н., доцент Каратанов Олександр Володимирович
Рейтинг мов програмування
За кількістю згадувань у результатах пошуку
Рейтинг мов програмування
За кількістю пошуку навчального матеріалу
Swift Playgrounds
Потрібен Mac
Ідеально для старту
Просто
Місцями надмірно
developer.apple.com
English
Ідеально
Багато графічних пояснень
Малувато посібників
Книга Swift Programming Language
Усов В. А. �Swift. Основи розробки додатків під iOS
Відмінно розібрано Swift
Замало інфи про мобільну розробку
Swift для дітей. �Самовчитель зі створення додатків для iOS
Є практичні приклади мобільного розроблення
Стиль викладу місцями як для дебілів
і це добре
Багатослівно
Школа Брата Антонія
Кумедний пузатик
Корисні посилання
Уроки від академії Яндекса �(не рекомендую)
Занудно
Затягнуто
Плутано
Складно
Корисно
Корисні посилання
Для чого потрібен Swift?
Якщо хочете створювати веб-сторінки або працювати з базами даних, Swift - не найкращий вибір.
Що вам потрібно?
Можете вивчити мову Swift без нього
Історія
Ще одна причина для вивчення Swift полягає в тому, що це все ще нова мова програмування, яка постійно розширюється.
Swift vs Objective-C
Особливості Swift
Вибір середовища для розробки мовою Swift
AppCode
Xcode
CodeRunner
Online Swift IDE
Hello, world в Swift
print("Hello, world!")
Коментарі у Swift
// це коментар
/* це теж коментар,
але написаний на двох рядках */
/* це початок першого багаторядкового коментаря
/* це другий, вкладений багаторядковий коментар */
це кінець першого багаторядкового коментаря */
Змінні
var theAnswerToTheUltimateQuestionOfLife = 42
var bestBook = "The Hobbit, or There and Back Again"
var 😂 = "😂😹"
Константи
let girlsAge = 20
Назва констант і змінних
let π = 3.14159
let 你好 = "你好世界"
let ?? = "dogcow"
Крапки з комою
var x = 0.0, y = 0.0, z = 0.0
print("Усе в руках людини."); print("Тому їх треба частіше мити.")
Виведення на екран
var myVariable = 42
print("The value is \(myVariable)")
var khai = "National Aerospace University \"Kharkiv Aviation Institute\""
print(khai)
print("Життя прекрасне, якщо навчишся жити")
Виведення на екран без перенесення курсору
print("У чому призначення людини?", terminator: " "); print("Бути людиною.")
У чому призначення людини? Бути людиною.
Анотація типів
var welcomeMessage: String
var red, green, blue: Double
Типи даних у Swift
Тип | Розмір у байтах | Діапазон прийнятих значень |
bool | 1 | true / false |
Int8 | 1 | –128 / 127 |
UInt8 | 1 | 0 / 255 |
Int16 | 2 | -32 768 / 32 767 |
UInt16 | 2 | 0 / 65 535 |
Int | Int32 або Int64 | –9223372036854775808 (?) / 9223372036854775807 (?) |
UInt | UInt32 або UInt64 | 0 / 18446744073709551615 (?) |
Int32 | 4 | -2 147 483 648 / 2 147 483 647 |
UInt32 | 4 | 0 / 4 294 967 295 |
Int64 | 8 | –9223372036854775808 / 9223372036854775807 |
UInt64 | 8 | 0 / 18446744073709551615 |
float | 4 | до 6 знаков в дробной части |
double | 8 | до 15 знаков в дробной части |
Character
var a: Character = "a"
var hello: String = "hello"
var number: Int = 22
var str: String = String(number) // "22"
Межі цілих чисел
let minValue = UInt8.min // minValue дорівнює 0, а його тип UInt8
let maxValue = UInt8.max // maxValue дорівнює 255, а його тип UInt8
Числові літерали
let decimalInteger = 17
let binaryInteger = 0b10001 // 17 у двійковій нотації
let octalInteger = 0o21 // 17 у вісімковій нотації
let hexadecimalInteger = 0x11 // 17 у шістнадцятковій нотації
Перетворення цілих чисел
let twoThousand: UInt16 = 2_000
let one: UInt8 = 1
let twoThousandAndOne = twoThousand + UInt16(one)
Тест
var a: Int8 = 10
var b: Int32 = 10
var c = a + b
Логічні типи
let orangesAreOrange = true
let turnipsAreDelicious = false
Опціональні типи
var number: Int? = 12
number = nil // тепер змінна number не має значення
print(number) // nil
var number: Optional<Int> = 12
Арифметичні операції у Swift
Тільки для цілочисельних.
На нуль ділити не можна!
Операції присвоювання
Операція | Позначення | Приклад | Екв.приклад | Пояснення |
операція присвоювання- додавання | += | var += 16 | var = var + 16 | Додаємо до значення змінної var число 16, результат підсумовування зберігається у змінній var |
операція присвоювання-віднімання | -= | var -= 16 | var = var — 16 | Віднімаємо зі змінної var число 16, результат віднімання зберігається у змінній var |
операція присвоювання-множення | *= | var *= 16 | var = var * 16 | Множимо значення змінної var у 16 разів, результат множення присвоюється змінній var |
операція присвоювання-ділення | /= | var /= 16 | var = var / 16 | Ділимо значення змінної var на 16, результат ділення присвоюється змінній var |
операція присвоювання-залишку від ділення | %= | var %= 16 | var = var % 16 | Знаходимо залишок від ділення і зберігаємо його у змінній var |
Інкремент і декремент
var x = 0
x += 1
print(x)
Тест
var x = 0
x +=1
print(x)
Це важливо: пробіли навколо операцій - обов'язкові з двох боків!
Або їх може не бути з обох боків - тоді теж працюватиме коректно.
Оператори порівняння
Оператор порівняння | Swift |
Рівність | == |
Нерівність | <> |
Більше Більше або дорівнює | > >= |
Менше Менше або дорівнює | < <= |
Логічні оператори
Логічні оператори | Swift |
Логічне І | && |
Логічне АБО | || |
Логічне НЕ | ! |
Таблиця істинності логічних операцій
a | b | a &&b | a||b |
true | true | true | true |
true | false | false | true |
false | true | false | true |
false | false | false | false |
~a |
false |
false |
true |
true |
Побітові оператори
Побітові оператори | Swift |
Побітове І | & |
Побітове АБО | | |
Побітове НЕ (інверсія) | ~ |
Виключне АБО | ^ |
Побітовий зсув уліво | << |
Побітовий зсув вправо | >> |
Байт. Біти
7 6 5 4 3 2 1 0
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 |
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
Побітові операції
a (біт 1) | b (біт 2) | a & b (a і b) | a | b (a або b) | a ^ b (a викл. ибо b) | ~a (не а) |
0 | 0 | 0 | 0 | 0 | 1 |
0 | 1 | 0 | 1 | 1 | 1 |
1 | 0 | 0 | 1 | 1 | 0 |
1 | 1 | 1 | 1 | 0 | 0 |
Операція "І" аналогічна множенню біт.
"АБО" - додаванню.
"НЕ" - інверсії.
Кортежі
let props = (22, "age")
var userInfo = (true, 34, "Tom")
var userInfo: (Bool, Int, String) = (true, 34, "Tom")
let age = userInfo.1
let isMarried = userInfo.0
var name = userInfo.2
Можемо змінювати елементи кортежу, якщо кортеж визначений як змінна
Умовна конструкція
let num1 = 22
let num2 = 15
if num1 > num2{
print("num1 більше ніж num2")
}
else if
let num1 = 22
let num2 = 15
if num1 > num2{
print("num1 більше ніж num2")
}
else if (num1 < num2){
print("num1 менше ніж num2")
}
else{
print("num1 та num2 рівні")
}
Тернарний оператор
let a = 0, b = 2
a > b ? print(a) : print(b); // якщо а > b, то отримаємо a, інакше b
Конструкція switch
var num: Int = 22
switch num {
case 0:
print(«Змінна дорівнює 0")
case 10:
print(" Змінна дорівнює 10")
case 22:
print(" Змінна дорівнює 22")
default:
print("не вдалося розпізнати число")
}
fallthrough
let personInfo = ("Tom", 22)
switch personInfo {
case ("Bob", 33):
print(«Ім’я: Bob, вік: 33")
case (_, 22):
print(«Ім’я: \(personInfo.0) та вік: 22")
fallthrough
case ("Tom", _):
print(«Ім’я: Tom та вік: \(personInfo.1))
default:
print("Інформація не розпізнана")
}
Цикл for-in
for item in 1...5 {
print(item)
}
Цикл while
var i = 10
while i > 0 {
print(i)
i-=1
}
Цикл repeat-while
var i = 10
repeat {
print(i)
i-=1
} while i > 0
Функції
func printName(){
print("Мене звати Олександр")
}
Параметри функції
func printInfo(_ name: String, _ age: Int){
print(«Ім’я: \(name); вік: \(age)")
}
printInfo("Sofia", 19) // Ім’я: Sofia; вік: 19
printInfo("Elijah", 35) // Ім’я: Elijah; вік: 20
Параметри функції
func printInfo(name: String, age: Int){
print(«Ім’я: \(name); вік: \(age)")
}
printInfo(name: "Sofia", age: 19) // Ім’я: Sofia; вік: 19
printInfo(name: "Elijah", age: 35) // Ім’я: Elijah; вік: 20