Bei Code 🍏
248 subscribers
113 photos
1 video
36 links
🚀 Добро пожаловать в iOS-разработку! 🎉
Для связи с автором: @iBeiCode
📱 Если ты начинающий разработчик или просто интересуешься IT, добро пожаловать на канал)

YouTube: https://youtube.com/@beicode

iOS
Swift
Xcode
Download Telegram
🛠️ Код закрыт, выходные открыты. Друзья, хороших выходных!🌴
7👍3
Test: 🧪
Можно ли использовать функции как возвращаемое значение в Swift🤔
Anonymous Quiz
85%
A) Да, можно
3%
B) Нет, нельзя
13%
C) Только в замыканиях
0%
D) Только при наследовании
👍31
Bei Code 🍏
Test: 🧪
Можно ли использовать функции как возвращаемое значение в Swift🤔
Пример кода к этому вопросу 👨‍💻

Код, чтобы просто взять и Ctrl+C Ctrl+V 👇


//
//Created by @Bei_Code
//

import Foundation

// Функция, возвращающая другую функцию.
func makeMultiplier(by factor: Int) -> (Int) -> Int {

// Вложенная функция, которая умножает число на factor
func multiplier(number: Int) -> Int {
return number * factor
}

// Возвращаем функцию
return multiplier
}

// Создаем функцию, которая будет умножать на 3
let triple = makeMultiplier(by: 3)

// Вызываем полученную функцию с аргументом 5 (3 * 5 = 15)
let result = triple(5)
print(result) // 15
2👍1
Сколько будет ‘’3’’ + ‘’2’’ в Swift?
Anonymous Quiz
6%
А) 23
4%
B) 5
87%
C) 32
4%
B) 6
🤯4😁31
Что выведет код?

let a = 5; let b = 2; print(a / b);
Anonymous Quiz
36%
2.5
12%
Ошибка компиляции
40%
2
12%
3
42
if channel.isHelpful {
let url = URL(string: "https://t.me/share/url?url=https://t.me/Bei_Code&text=ГодныйКаналДляiOS-разработчиков🍏")!
share(with: .friends, link: url)
}
4👍2🔥1
Сколько бит в одном байте?
Anonymous Quiz
4%
4
82%
8
8%
16
6%
32
1👍1
Можно ли задать значение по умолчанию для inout параметра в swift?
Anonymous Quiz
41%
Да, можно
50%
Нет, нельзя
9%
Только с Optional
0%
Только с nil
👍2💯1
Ошибки — это круто! 🔥

Даже если в тесте ответил неправильно — это хорошо! Потому что:
✔️ Учишься — теперь знаешь, как делать верно.
✔️ Запоминаешь — ошибки помогают информации "застревать" в голове.
✔️ Растёшь — каждый промах приближает к успеху.

Главное — не бояться ошибаться. Ведь именно так рождается опыт! 💪
4💯32
Как сделать функцию доступной только внутри текущего файла?
Anonymous Quiz
29%
A. private
8%
B. internal
63%
C. fileprivate
0%
D. static
1👍1
Функции — пройдены!
Мы разобрали основы: объявление, параметры, вложенность, inout и многое другое.

Теперь двигаемся дальше — замыкания (closures).
Анонимные функции, передача логики как значения и ещё больше гибкости в коде. Погнали! 🚀
41
Bei Code 🍏
Test: 🧪
Что такое замыкание в Swift🤔
Пример кода к этому вопросу 👨‍💻

Код, чтобы просто взять и Ctrl+C Ctrl+V 👇


import Foundation

// Функция возвращает замыкание (closure), которое умножает захваченное значение
func makeMultiplier(by factor: Int) -> () -> Int {
var total = 1 // Локальная переменная, которая будет захвачена замыканием

// Замыкание, которое захватывает total и factor
let closure = {
total *= factor // Умножаем total на factor и сохраняем результат
return total // Возвращаем текущее значение total
}

return closure // Возвращаем замыкание
}

// Создаём замыкание, которое будет умножать на 2
let multiplyBy2 = makeMultiplier(by: 2)

// Каждый вызов multiplyBy2() увеличивает значение total и возвращает его
print(multiplyBy2()) // 2 (1 * 2)
print(multiplyBy2()) // 4 (2 * 2)
print(multiplyBy2()) // 8 (4 * 2)
2👍2
Test: 🧪
Что используется для предотвращения захвата сильной ссылки на объект в замыкании🤔
Anonymous Quiz
4%
A) [let self]
0%
B) [strong self]
96%
C) [weak self]
0%
D) [var self]
2👍1
Bei Code 🍏
Test: 🧪
Что используется для предотвращения захвата сильной ссылки на объект в замыкании🤔
Код, чтобы просто взять и Ctrl+C Ctrl+V 👇


class A {

var closure: (() -> Void)?

func setup() {
// Замыкание захватывает self сильно (по умолчанию)
closure = {
print("B is doing something: \(String(describing: self))")
}
}

deinit {
print("A deallocated ") // Не вызовется из-за retain cycle
}
}

// Создаём объект A
var a: A? = A()
a?.setup()
// Обнуляем ссылку — объект не освобождается
a = nil // deinit не вызывается — утечка памяти!

class B {

var closure: (() -> Void)?

func setup() {
// Используем [weak self], чтобы избежать цикла сильных ссылок
closure = { [weak self] in
print("B is doing something: \(String(describing: self))")
}
}

deinit {
print("B deallocated") // Вызывается — всё хорошо!
}
}

// Создаём объект B
var b: B? = B()
b?.setup()
// Обнуляем ссылку — объект освобождается, замыкание не удерживает его сильно
b = nil // deinit вызывается — утечки нет
1👍1