В чем основное различие между этими двумя типами? Ссылочные типы совместно используют индивидуальную копию своих данных, в то время как типы значений сохраняют уникальную копию своих данных.

Типы ссылок

Классы определяют ссылочный тип, аналогичный Objective-C. Они состоят из общих экземпляров, которые могут передаваться и ссылаться на многие переменные. Взгляните на этот код:

// Reference Types:
class Person {
  var isHappy = true
}
let michael = Person()
let john = michael
john.isHappy = false
michael.isHappy // false
john.isHappy // false

При изменении одного экземпляра изменяется другой, поскольку оба они ссылаются на один и тот же объект. Оба они указывают на одно и то же место в памяти.
Все еще не понимаете? Может это видео поможет:

Типы значений

Давайте сначала посмотрим на код:

// Value Types:
var a = 2
var b = a
b += 2
a    // 2
b    // 4

а также

struct Person {
  var isHappy = true
}
var michael = Person()
var john = michael
john.isHappy = false
michael.isHappy // true
john.isHappy      // false

Теперь вы должны знать разницу между этими двумя типами. Если нет, то здесь есть видео, в котором объясняются типы значений:

Изменчивость

Для ссылочных типов, как вы могли заметить, мы используем константы с ключевым словом let. Вы не можете изменить экземпляр постоянной ссылки, но можете изменить сам экземпляр. С другой стороны, для типов значений let означает, что экземпляр должен оставаться постоянным. Никакие свойства экземпляра никогда не изменятся, независимо от того, объявлено ли свойство с помощью let или var.

Когда использовать ссылочный тип

  • Использование ссылочного типа при сравнении идентичности экземпляра с === имеет смысл
  • Используйте ссылочный тип, если вы хотите создать общее изменяемое состояние

Когда использовать тип значения

  • Использование типа значения при сравнении данных экземпляра с == имеет смысл
  • Используйте тип значения, когда копии должны иметь независимое состояние
  • Используйте тип значения, если код будет использовать эти данные в нескольких потоках

Заключение

Это основы, которые вам следует знать. Я сам смотрел все видео, на которые я ссылался в этом посте, и они довольно много рассказывали о том, как работают Swift и SwiftUI. Вы лучше поймете, как моделировать данные в своем приложении. Какие типы значений следует использовать и когда? Если вы хотите углубиться в тему оболочек свойств, которые помогут применить эти знания в практике SwiftUI, посмотрите это видео: