Новый способ изменить взгляды

Некоторое время назад я написал статью об изменении представлений в SwiftUI, вот эту.
В нем предполагается, что предпочтительным методом является использование опубликованных ObservableObjects. Лучший вариант из представленных вариантов, но, играя с протоколами, делегированием и одиночками, я думаю, что нашел лучший способ. Это лучший способ, потому что - ну, в глубине души у меня есть тихая оговорка с ObservedObjects, поскольку они фактически являются глобальными переменными. Используя представленный здесь метод, вы можете добиться такого же гибкого переключения типа, вообще без необходимости использования глобальных переменных. Читать дальше.
Вкратце - я собираюсь создать три представления SwiftUI, все из которых будут одиночными вместе с классом, который также будет одиночным, который я буду использовать для перехода между ними. Я собираюсь использовать протокол, чтобы убедиться, что мы все на одной странице. Кодировать.
Конечно, мы начинаем с протокола. Очень простой, который предусматривает, что вам нужно создать ссылку для всех представлений, которые мы собираемся использовать.
protocol Connections {
var delegateA: SwiftUIViewA? { get }
var delegateB: SwiftUIViewB? { get }
var delegateC: SwiftUIViewC? { get }
}
Затем мы создаем класс, который будет подтверждать указанный протокол, центральную точку, через которую мы можем ссылаться на любое из наших представлений, другой синглтон.
class ConnectABC: Connections {
var delegateA: SwiftUIViewA?
var delegateB: SwiftUIViewB?
var delegateC: SwiftUIViewC?
static var shared = ConnectABC()
}
Затем я устанавливаю значения для класса и ссылаюсь на все представления [еще не созданные] с помощью этого кода.
Это создает экземпляр класса и добавляет все представления [как одиночные], а затем устанавливает переменные делегата так, чтобы они указывали на указанные представления.
Наконец, я создаю представления, это код для SwiftUIViewA.
SwiftUIViewB выглядит так.
И представление SwiftUIViewC выглядит так.
Наконец, извините, я чуть не забыл; код, который вам нужен, чтобы связать все вместе.
Сложите все вместе, и вы получите анимированный gif, который я включил в начало этой статьи. Хотя, должен признаться, я изменил Spacer (), которые здесь видны, чтобы я мог делать пейзаж.
На этом эта короткая и приятная статья подошла к концу. Я надеюсь, что вы найдете это интересным и действительно продолжите опробовать метод, показанный здесь, в ваших собственных приложениях. Нет - вы даже можете расширить его, чтобы управлять представлениями в ваших представлениях. Теперь есть пища для размышлений.
Сохраняйте спокойствие, продолжайте кодировать.