May 7, 2021

Swift 2021 бесплатные уроки для новичка. Часть 2

Часть 1    (1-10 уроки)

Часть 2    (11-13 уроки)

Часть 3   (15-20 уроки)

// Lesson 11 / Составной тип данных Tuple

// Видео 1:32:23

let a = 10

// a где число 10 по умолчанию является Int

тип : Int (целочисленное число)
let b = "Hello"

// b где слово Hello по умолчанию является Sting

тип : String (строка)

// tuple — тюпле

// Это не коллекция, а набор разных данных. (в скобках tuple)

var person = (name: "Igor", age: 38, isMarried: true, weight: 90.5)

//  переменная персона = (имя: «Игорь», возраст 38, Женат: да)

var tuple1 = (a, b)                        
var tuple2 = (10, "Hello")

// a = 10 Int  // b = "Hello" String

// a = 10 Int  // "Hello"

// в скобках справа мы видим что tuple1      0 — 10, 1 — Hello, и.т.д.

тип : Int (число), String (строка)
var tuple3: (Int, String)
tuple3 = (45, "Swift")

// Все это варианты записи и присваивания tuple

var tuple4 = (name: "Igor", age: 38, isMarried: true, weight: 90.5)
var (weight, height) = (75, 170)               // это тоже tuple5
tuple (виды записи)

// Пример 1

// Как работать с tuple //используя индексы

// Возьмем tuple4 / методы разбора

var tuple4 = (name: "Igor", age: 38, isMarried: true, weight: 90.5)
tuple4.0
tuple4.1
tuple4.2
tuple4.3

// 1 метод как разобрать

tuple 4 индекса с (0 — Igor, 1 — 38 , 2 — true, 3 — 90.5)

// 2 метод как разобрать (выбираем что хотим вывести)

tuple4.

// 2 метод как разобрать

tuple4.name tuple4.age tuple4.isMarried tuple4.weight

// Пример 2

let info = ("Ivanov", 31, 80.5)         // Константа задаем значения
var (lastName, age, weight) = info      // Переменная присваиваем значения
lastName
age
weight
tuble ("Ivanov", 31, 80.5)

// Если мы хотим вывести только вес (weight)

let info = ("Ivanov", 31, 80.5)
var (_, _, weight) = info
weight

// В таком случае выводится значение 80.5 (weight) вес

tuble (_, _, weight)

// Как причислить значения

var point1 = (x:4, y:3)
var point2 = (x:2, y:6)
point2 = point1
point2
point2 (x:4, y:3)
var point1 = (x:"Car", y:"Wash")
var point2 = (x:"Car", y:"Clear")
point2 = point1
point2

// Lesson 12 / Опциональные типы данных

// nil

// Видео 1:46:54

nil — когда на запрос не приходит ничего.

// Есть разница между 0 и ничего.

// Пакет пуст? или Пакета нет. (Пуст 0)(Пакета нет nil)

Вы отправляете запрос на сервер сколько у вас осталось памяти в ответ приходит 0

// Отправить на сервер запрос, какая погода?

// Придет ответ: 0 градусов или ответа не будет вовсе.

Вы отправляете запрос на сервер в ответ ничего не приходит.

// 0 вполне определенное число.

// Пример 1 

var age: Int? = 12
age = nil
age + 1

// Возможна такая операция? В ничего положить яблоко?

age = nil

// age + 1

age + 1 где age = nil

// Ошибка / В вашей программе всегда должны быть привязаны значения.

var age: Int? = 12
if age == nil {
print("age is nil")
} else {
print(age)
}

// Будет ошибка.

print(age)

// Добавим постфикс ( ! ) age!

var age: Int? = 12
if age == nil {
print("age is nil")
} else {
age! + 1
}

//  Силовое, принудительное разворачивание, когда добавляем !

// Force Unwrapping ( ! )

Пример 1 Force Unwrapping ( ! ) age! + 1 принудительное разворачивание

// Стараться не использовать иначе при ошибке приложение вылетает.

let str = "Clear 10"
let num = Int(str)!

// Не получилось причине  Int содержитзначение String"Clear 10"

Пример 2 Force Unwrapping ( ! ) Int(str)! принудительное разворачивание
let str = "10"
let num = Int(str)!

// Получилось, наше значение было только Int "10" попробуйте «10.342»

Пример 3 Force Unwrapping ( ! )

// Пример 2 / Optional Binding / Опциональное связывание

var age: Int? = 12
if let safeAge = age {
safeAge
} else {
print("age = nil")
}

// Принт не выводит.

Optional Binding 1 / Опциональное связывание 1

//  Пример 3 / Optional Binding / Опциональное связывание

var age: Int? = 12
if var safeAge = age {
safeAge += 1
print("Age = \(Int(safeAge))")
} else {
print("age = nil")
}

// Попробуйте вместо Int вывести Double или String

Optional Binding 2 / Опциональное связывание 2

//  Пример 4 / Optional Binding / Опциональное связывание

let yearOfBirth = "1980"
Int(yearOfBirth)
if let safeYearOfBirth = Int(yearOfBirth) {
safeYearOfBirth
}
Optional Binding 3 / Опциональное связывание 3

//  Пример 5 / Optional Binding / Опциональное связывание

var example: String? = "Hello"
print(example ?? "example = nil")

// String? — нет данных по строке по этому она nil

// переменная пример:  СтрокаНеизвестна = «Hello»

// печатать(пример ?? example = nil )

// напечатал Hello потому что вторая строка nil (СтрокаНеизвестна)

// попробуйте вместе "Hello"  вывести пустую строку " " что будет?

Optional Binding 4 / Опциональное связывание 4

// или так

Optional Int?

// Что такое: / Nil Coalescing Operator / ??

Для удобства разворачивания optionals ввели Nil Coalescing Operator ??, который присваивает значение указанное справа после ?? если значение слева от ?? равно nil

т.к. customHeight не присвоено значение (текущее = nil) – height будет в итоге присвоено значение defaultHeight

Nil Coalescing Operator ??

т.к. customHeight не присвоено значение (текущее = nil) – height будет в итоге присвоено значение defaultHeight

Nil Coalescing Operator ??

В этом случае height присвоится значение customHeight = 20

let defaultHeight = 100
var customHeight : Int?
var height = customHeight ?? defaultHeight
customHeight
defaultHeight
customHeight = 20
height = customHeight ?? defaultHeight
customHeight                  // Ответ 20
defaultHeight                  // Ответ 80

// Implicitly Unwrapped Optional / Неявно извлеченный опционал  / !

@IBOutlet var usernameField: UITextField!

Мы используем восклицательный знак ! после типа свойства, что обозначает неявно извлеченный опционал.

// Int  / Обычный интеджер

// Int? / Опциональный интеджер

Int?

// Int! / Неявно извлеченный интеджер / первый раз будет nil а дальше будут обычные значения /

var number1: Int! = nil
number1 = 10
number1 = number1 + 1
Int / Обычный
Int? / Опциональный интеджер
Int! / Неявно извлеченный интеджер

// Пробуйте свои варианты.

// Lesson 13 / Массивы / Массив (Array)

// Коллекции:

// Массив (Array), Множество (Set),  Словарь (Dictionary)

// Видео 2:04:41​ Массивы

// Массив (Array)

Массив (Array)

// let Константа (Коллекция после сознания неизменна.)

// var Переменная (Коллекцию можно менять, добавлять, удалять.)

var array1 = Array()

// Полная форма записи массива (храним строки) ()

var array2 = [String]()

// Краткая форма записи массива (предпочтительней)

// Пример 1 / Создаем неизменный let массив фрукты (fruits)

let apple = "apple"
let lemon = "lemon"
let orange = "orange"
let strawberry = "strawberry"
let fruits = [apple, lemon, orange, strawberry]
let fruits = [apple, lemon, orange, strawberry]

// Пример 2 / Можем изменять его через

// методы и свойства — вносить изменения

// индексы и значения — выводить и показывать

var shoppinglist = ["eggs","milk","bread","flour","sweets"]
shoppinglist.count
shoppinglist.isEmpty
var shoppinglist = ["eggs","milk","bread","flour","sweets"]

// .count Справа видим цифру 5 которая нам говорит о том что в массиве.

// .isEmpty пустой ли наш массив? false — нет, заполнен (не пустой)

// или можем добавить в массив var shoppinglist = []

shoppinglist.append("butter")
shoppinglist.append

// Вывести информацию из массива можно [0] где число в скобках = индексу

shoppinglist[0]

// Попробуйте вывести milk и flour или составьте свой массив.

shoppinglist[0]

// Заменим milk на salt [1] = "salt"

shoppinglist[1] = "salt"                      // Заменим "milk" на "salt"
shoppinglist[1]
shoppinglist[1] = "salt"
for item in shoppinglist {
print(item)
}

для предметов в спискеШопЛиста {

распечатать (предметы)

}

print(item)

// Распечатаем список с Индексом и Названиями

for (index, value) in
shoppinglist.enumerated() {
print("Покупки \(index): \(value)")
}
print("Покупки \(index): \(value)")

// Что, откуда берется.

print("Покупки \(index): \(value)")

// Что такое .enumerated (Читать)

for (n, c) in "Swift".enumerated() {
print("По буквам \(n): '\(c)'")
}

// Что получилось.

for (n, c) in "Swift".enumerated()

// Или вот так

for (x, y) in shoppinglist.enumerated() {
print("Покупки \(x): \(y)")
}
for (x, y) in shoppinglist.enumerated()

// А если мы забыли перец? «pepper»

var shoppinglist = ["eggs","milk","bread","flour","sweets"]
for (x, y) in shoppinglist.enumerated() {
print("Покупки \(x): \(y)")
}
shoppinglist += ["pepper"]

// Пробуйте

var numbers1 = [1, 2, 3, 4, 5]
var numbers2 = [6, 7, 8]
var numbers3 = [9]
var numbers4 = numbers1 + numbers2 + numbers3
print(numbers4)
print(numbers4)
print("Индекс \(index): \(y)")
print("Индекс \(index): \(цифры)")

// Lesson 14 / Множество / Множество (Set)

// Коллекции:

// Массив (Array), Множество (Set),  Словарь (Dictionary)

// Видео 2:18:33​ Множества

Множество (Set)

var set = Set()

// Форма записи множества (храним строки) Set()

var listOfSports: Set = ["Badminton", "Bowlling", "Tennis", "Hockey", "Running"]

// Поскольку определяется автоматически упростим нашу запись / Set = []

var listOfSports: Set = ["Badminton", "Bowlling", "Tennis", "Hockey", "Running"]
listOfSports.count
listOfSports.isEmpty
listOfSports.insert("Fishing")
listOfSports.remove("Bowlling")
listOfSports.contains("Tennis")
listOfSports.sorted()
listOfSports

// .count Справа видим цифру 5 показывает число элементов.

// .isEmpty пустой ли наш массив? false — нет, заполнен (не пустой)

// .insert добавляем

// Неупорядоченная коллекция по этому нет .append вместо него .insert

// .remove — удаляем элемент

// .contains — проверяем есть такой или нет Есть — (True), Нет —  (False)

// .sorted() — сортировка, расстановка по возрастанию.

Set — обновление 1

// При каждом обновлении меняются местами.

Set — обновление 2

// Bowlling — пропал. Tennis — True (есть)

Set — обновление 3 / .remove / .contains

// Итерации - повторения

for sports in listOfSports {
print(sports)
}
Set — будут каждый раз в разном порядке.

// Сортировать способом по возрастанию —  .sorted()

for sports in listOfSports.sorted() {
print(sports)
}
.sorted()

// По алфавиту: B, F, H, R, T,

var numbers: Set = [5, 1, 3, 2, 9, 8, 7]
for numbers in numbers.sorted() {
print(numbers)
}

// для каждого номера в нашем сете .сортировать() { печатать (номера) }

.sorted() по возрастанию

//

let car1 = Set(["Ford", "Mazda", "Lada"])
let car2 = Set(["Ford", "Mazda", "Lada", "Ford", "Mazda", "Lada"])

// в сете car2 все дубли удаляться.

Set(["Ford", "Mazda", "Lada"])

// Вывод Set Множества содержат только УНИКАЛЬНЫЕ значения.

let oddNumbers: Set = [1, 3, 5, 7, 9]
let evenNumbers: Set = [0, 2, 4, 6, 8]
let primeNumbers: Set = [2, 3, 5, 7, 11]
oddNumbers.union(evenNumbers).sorted()
oddNumbers.intersection(evenNumbers).sorted()
oddNumbers.subtracting(primeNumbers).sorted()
oddNumbers.symmetricDifference(primeNumbers).sorted()
  1. Используйте метод union (_:) для создания нового множества состоящего из всех значений обоих множеств. (Apple)
  2. Используйте метод intersection (_:) для создания нового множества из общих значений двух входных множеств. (Apple)
  3. Используйте метод subtracting (_:) для создания множества со значениями не принадлежащих указанному множеству из двух входных. (Apple)
  4. Используйте метод symmetricDifference (_:) для создания нового множества из значений, которые не повторяются в двух входных множествах. (Apple)

// Читать на нашем нужно (здесь)

Методы
Пример Множеств.

// Продолжение / Часть 3 / ( ПЕРЕЙТИ)

// Lesson 15 / Словари / Словарь (Dictionary)

// Видео 2:34:27​ Словари