Типы-значения для уменьшения совместного использования
Отдавайте предпочтение типам-значениям , чтобы избежать случайного совместного использования: структуры и перечисления копируются при присваивании, что повышает изолированность, предсказуемость и безопасность потоков.
«Типы-значения для уменьшения совместного использования» — бесплатный урок Swift Academy на CoddyKit. Это урок 3 из 3. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 3 уроков всего.
Зачем нужны типы-значения?
В Swift структуры и перечисления являются типами-значениями: присваивание и передача создают копии. Это уменьшает случайное совместное использование и упрощает анализ состояния.
Совместное использование ссылок (класс)
Классы являются ссылочными типами: несколько переменных могут указывать на один экземпляр, поэтому изменения распространяются через псевдонимы.
final class Bag {
var items: [String]
init(_ items: [String]) { self.items = items }
}
let a = Bag(["pen"])
let b = a // REF COPY: a and b refer to the same object
b.items.append("book")
print(a.items) // ["pen","book"] — mutated via b
print(b.items)Независимые копии (структура)
Структуры копируются при присваивании. Каждая переменная владеет собственными данными; изменения остаются локальными.
struct Point { var x: Int; var y: Int }
var p1 = Point(x: 1, y: 2)
var p2 = p1 // VALUE COPY: independent
p2.x = 99
print(p1.x, p2.x) // 1, 99 — p1 unaffectedКоллекции с копированием при записи
Массивы, словари и множества являются типами-значениями с механизмом копирования при записи. Когда вы изменяете массив, на который ссылаются неуникально, Swift создаёт свежую копию.
var a1 = [1,2,3]
var a2 = a1 // copy-on-write handle
a2.append(4) // triggers copy if a1 is uniquely referenced
print(a1) // [1,2,3]
print(a2) // [1,2,3,4]Обновления в чистом стиле
Проектируйте API в условно чистом стиле: принимайте значение и возвращайте новое значение. Вызывающий код избегает неожиданных общих изменений.
struct Profile {
var name: String
var tags: [String]
}
func addTag(_ p: Profile, _ tag: String) -> Profile {
var copy = p // work on a value copy
copy.tags.append(tag) // caller gets a new updated value
return copy
}
let pA = Profile(name: "Ana", tags: [])
let pB = addTag(pA, "swift")
print(pA.tags) // []
print(pB.tags) // ["swift"]Разумный выбор
Рекомендации:
- Предпочитайте структуру для небольших неизменяемых данных или данных, изменяемых локально.
- Используйте класс, когда необходимы идентичность, общее изменяемое состояние или наследование.
- Типы-значения уменьшают совместное использование и упрощают анализ безопасности параллельного выполнения.
Совместное использование значений и ссылок
Быстрая проверка: почему типы-значения помогают избежать непреднамеренного совместного использования?
Повторение
Повторение: структуры и перечисления — это значения. Используйте их, чтобы свести к минимуму общее изменяемое состояние. В коллекциях применяется копирование при записи, поэтому изменения не застают другие ссылки врасплох.
Часто задаваемые вопросы
Урок «Типы-значения для уменьшения совместного использования» бесплатный?
Да — полный текст урока «Типы-значения для уменьшения совместного использования» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 3 уроков всего.
Чему я научусь в уроке «Типы-значения для уменьшения совместного использования»?
Отдавайте предпочтение типам-значениям , чтобы избежать случайного совместного использования: структуры и перечисления копируются при присваивании, что повышает изолированность, предсказуемость и без… Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Swift Academy?
Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 3.
Сколько времени занимает урок «Типы-значения для уменьшения совместного использования»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Swift Academy?
Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Основы ARC: strong / weak / unowned
- Циклы удержания и разрыв с помощью weak/unowned
- Типы-значения для уменьшения совместного использования