Подписывайся на телеграм - RIABOV_DEV
Чтобы понять, что из себя представляет свойство "var body: some View" нам нужно понять следующее:
- Computed Property
- Getter/Setter
- Opaque Types/Some
1. Computed Property
Здесь все просто, есть вычисляемые переменные и невычисляемые
Невычисляемые свойства - такие какие они есть. Такие, как вы их задали. Эти свойства могут быть или переменными свойствами хранения (начинаются с ключевого слова var), или постоянными свойствами хранения (начинается с ключевого слова let).
Грубо говоря, значение свойства var ты можешь изменить, а let - нет, это константа.
Теперь вернемся к вычисляемым свойствам.
Чтобы создать вычисляемое свойство, поместите открывающую фигурную скобку { после самого свойства свойства.
Представим, что у нас есть переменная которая вычисляет название файла.
Почему при попытке изменить значение нашей вычисляемой перменной мы получаем ошибку?
2. Getter/Setter
Вычисляемые свойства могут также могут использовать геттер (get) и сеттер (set):
- Геттер срабатывает когда вам нужно получить значения свойства.
- Сеттер срабатывает когда вы хотите установить новое значение свойства.
Обратите внимание констукция { get set } говорит о том, что свойство должно уметь менять значение т.е. константой его объявлять нельзя, только переменной. И как обсуждалось ранее, get разрешает использовать константы.
Использовать set без get нельзя.
У вычисляемого свойства по умолчанию всегда есть getter. У getter есть return который возвращает значение. Т.е. setter у вычисляемого свойства поумолчанию нет, из этого и наша ошибка.
Чтобы исправить нашу ошибку, добавим к нашему свойству setter.
Далее мы можем упростить:
Ничего не напоминает?
3. Opaque Types
Ключевое слово some появилось в Swift 5.1. Оно используется вместе с протоколом для создания Opaque Type, представляющего что-то, что соответствует определенному протоколу.
Т.е. свойство var body: some View должно возвращать какое-то одно view, которое соответсвует протоколу View. Всё.
Что если у нас в свойстве var body несколько View? Для этого существуют контейнеры, каждое subview рисуется внутри родительского вью, и так далее вверх по иерархии до первого родительского вью.
Один контейнер может содержать до 10 элементов включительно.
Чтобы решить эту проблему мы можем добавить ещё один контейнер внутри существующего.
Подписывайся на телеграм - RIABOV_DEV
//статья является частью моей электронной книги//
Пример кода и другие статьи в моей электронной книге: