В чем основное различие между этими двумя типами? Ссылочные типы совместно используют индивидуальную копию своих данных, в то время как типы значений сохраняют уникальную копию своих данных.
Типы ссылок
Классы определяют ссылочный тип, аналогичный 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, посмотрите это видео: