Структуры и классы, свойства и инициализаторы
Сравните семантику значений и ссылок; используйте хранимые и вычисляемые свойства, наблюдатели свойств, инициализаторы и deinit классов.
«Структуры и классы, свойства и инициализаторы» — бесплатный урок Swift Academy на CoddyKit. Это урок 1 из 3. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 3 уроков всего.
Обзор
В Swift есть два основных составных типа: структура (значение) и класс (ссылка).
- Структуры копируются при присваивании
- Классы используют общие ссылки
Значения и ссылки
Структуры копируют значения; классы используют общие ссылки. Изменение b не влияет на a, но изменение d влияет на c.
struct Point { var x = 0, y = 0 }
class CPoint { var x = 0, y = 0 }
var a = Point(x: 1, y: 1)
var b = a // copy
b.x = 9
print("struct a.x =", a.x, "b.x =", b.x) // 1, 9
let c = CPoint(); c.x = 1
let d = c // same reference
d.x = 9
print("class c.x =", c.x, "d.x =", d.x) // 9, 9Свойства
Хранимые свойства содержат данные; вычисляемые свойства получают значения при обращении.
struct Rectangle {
var width: Double // stored
var height: Double // stored
var area: Double { // computed
return width * height
}
}
let r = Rectangle(width: 3, height: 4)
print(r.area) // 12Наблюдатели
Используйте willSet/didSet, чтобы отслеживать изменения хранимых свойств.
struct Counter {
var value: Int = 0 {
willSet { print("will set to", newValue) }
didSet { print("did set from", oldValue) }
}
}
var cnt = Counter()
cnt.value = 5Инициализаторы
Структуры получают поэлементный инициализатор. Классы определяют init (основной инициализатор) и могут добавлять вспомогательные инициализаторы.
struct User {
var name: String
// memberwise init is synthesized: User(name:)
}
class Person {
var name: String
init(name: String) { // designated
self.name = name
}
convenience init() { // convenience
self.init(name: "Guest")
}
}
let u = User(name: "Ada")
let p = Person()
print(u.name, p.name)Деинициализация
Только классы имеют деинициализатор, который вызывается при освобождении экземпляра (ARC).
class Temp {
let id: Int
init(id: Int) { self.id = id }
deinit { print("Temp \\(id) deinit") }
}
do {
let t = Temp(id: 1)
print("using", t.id)
} // t goes out of scope and deinit may runВопрос о структурах и классах
Быстрая проверка: какое утверждение правильно описывает различие между структурами и классами?
Итоги
Итоги: предпочитайте структуру для простых данных (семантика значений). Используйте класс для общей идентичности, наследования и деинициализации. Добавляйте хранимые и вычисляемые свойства, наблюдателей и подходящие инициализаторы.
Часто задаваемые вопросы
Урок «Структуры и классы, свойства и инициализаторы» бесплатный?
Да — полный текст урока «Структуры и классы, свойства и инициализаторы» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 3 уроков всего.
Чему я научусь в уроке «Структуры и классы, свойства и инициализаторы»?
Сравните семантику значений и ссылок; используйте хранимые и вычисляемые свойства, наблюдатели свойств, инициализаторы и deinit классов. Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Swift Academy?
Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 3.
Сколько времени занимает урок «Структуры и классы, свойства и инициализаторы»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Swift Academy?
Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Структуры и классы, свойства и инициализаторы
- Хранимые и вычисляемые свойства, наблюдатели
- Инициализаторы и deinit (классы)