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

Некоторое время назад я написал статью об изменении представлений в 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 (), которые здесь видны, чтобы я мог делать пейзаж.

На этом эта короткая и приятная статья подошла к концу. Я надеюсь, что вы найдете это интересным и действительно продолжите опробовать метод, показанный здесь, в ваших собственных приложениях. Нет - вы даже можете расширить его, чтобы управлять представлениями в ваших представлениях. Теперь есть пища для размышлений.

Сохраняйте спокойствие, продолжайте кодировать.