Swift Academy · Урок

Типы-значения и неизменяемость

Узнайте, как let предотвращает изменение типов-значений.

Урок 1 из 413 шагов

«Типы-значения и неизменяемость» — бесплатный урок 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 — локальная установка не требуется.

Все уроки этого курса

  1. Типы-значения и неизменяемость
  2. Ключевое слово mutating
  3. Изменение и переназначение self
  4. Неизменяющие альтернативы
← Назад к Swift Academy