Типы-значения и неизменяемость
Узнайте, как let предотвращает изменение типов-значений.
«Типы-значения и неизменяемость» — бесплатный урок Swift Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 4 уроков всего.
Структуры — типы-значения
В Swift struct и enum являются типами-значениями. При присваивании одного значения новой переменной создаётся его копия.
struct Point { var x: Int; var y: Int }
var a = Point(x: 1, y: 2)
var copy = a
copy.x = 99
print(a.x, copy.x)let блокирует всё значение
Объявление структуры с помощью let делает всё значение неизменяемым, включая все его свойства.
struct Counter { var value: Int }
let c = Counter(value: 0)
// c.value = 5 // compile error
print(c.value)var разрешает изменение
Используйте var, если собираетесь изменять свойства структуры после её создания.
struct Counter { var value: Int }
var c = Counter(value: 0)
c.value = 5
print(c.value)Копирование при присваивании
Каждая переменная хранит собственную независимую копию. Изменение одной переменной никогда не влияет на другую.
struct Box { var label: String }
var first = Box(label: "A")
var second = first
second.label = "B"
print(first.label, second.label)Семантика значений в функциях
При передаче структуры в функцию передаётся копия. Исходное значение за пределами функции не изменяется.
struct Score { var points: Int }
func bump(_ s: Score) {
var local = s
local.points += 10
}
var s = Score(points: 0)
bump(s)
print(s.points)Неизменяемые свойства
Свойство, объявленное с помощью let внутри структуры, никогда нельзя изменить, даже у экземпляра, объявленного как var.
struct User { let id: Int; var name: String }
var u = User(id: 1, name: "Ada")
u.name = "Bob"
// u.id = 2 // compile error
print(u.id, u.name)Массивы тоже являются типами-значениями
Array, Dictionary и Set в Swift являются структурами, поэтому при присваивании создаётся копия.
var a = [1, 2, 3]
var b = a
b.append(4)
print(a)
print(b)Строки являются типами-значениями
String также является типом-значением. Изменение копии не затрагивает исходное значение.
var s1 = "hi"
var s2 = s1
s2 += " there"
print(s1)
print(s2)Преимущества типов-значений
Семантика значений предотвращает ошибки из-за случайно разделяемого состояния. Вы можете рассуждать о значении локально, не беспокоясь о том, что ещё кто-то хранит ссылку на него.
struct Config { var retries: Int }
let defaultConfig = Config(retries: 3)
var custom = defaultConfig
custom.retries = 5
print(defaultConfig.retries, custom.retries)Неизменяемость и безопасность
Если по возможности объявлять значения с помощью let, код становится безопаснее и понятнее. Компилятор гарантирует, что такие значения никогда не изменятся.
let limit = 100
let name = "stable"
print(limit, name)Повторное присваивание переменной let завершается ошибкой
Нельзя повторно присвоить значение привязке let или изменить хранящееся в ней значение.
let pi = 3.14
// pi = 3.15 // compile error
print(pi)Быстрая проверка
Проверьте поведение типов-значений.
Итоги
Структуры и перечисления являются типами-значениями: при присваивании и передаче в функции они копируются. Привязка let блокирует всё значение, а свойство let никогда нельзя изменить. Благодаря этому состояние остаётся предсказуемым и изолированным.
struct P { var n: Int }
var a = P(n: 1)
var b = a
b.n = 9
print(a.n, b.n)Изучай Swift с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 122
- Уроки
- 409
Часто задаваемые вопросы
Урок «Типы-значения и неизменяемость» бесплатный?
Да — полный текст урока «Типы-значения и неизменяемость» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 4 уроков всего.
Чему я научусь в уроке «Типы-значения и неизменяемость»?
Узнайте, как let предотвращает изменение типов-значений. Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Swift Academy?
Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Типы-значения и неизменяемость»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Swift Academy?
Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Типы-значения и неизменяемость
- Ключевое слово mutating
- Изменение и переназначение self
- Неизменяющие альтернативы