SwiftUI - PageView - передача в разных видах - PullRequest
2 голосов
/ 21 октября 2019

Я успешно реализовал PageView в SwiftUI через поток:
Как реализовать PageView в SwiftUI?

Передача в нескольких представлениях через массив работает как чудо, пока всепредставления имеют одинаковую структуру.
PageView([TestView(), TestView()]).
Однако я бы хотел передать разные представления.
PageView([TestView(), AnotherView(), DifferentView()]).

Все представления имеют тип SwiftUI:
struct NAME : View { code }

Когда я пытаюсь добавить различные структуры в массив, я получаю следующее сообщение об ошибке:

var pageViewViewArray = [TestView(), AnotherView(), DifferentView()]

Литерал гетерогенного набора может быть выведен только как '[Любой]';добавьте явную аннотацию типа, если это преднамеренно.
Вставьте 'как [Любой]

, приведя его к:

var pageViewViewArray = [TestView(), AnotherView(), DifferentView()] as! [Any]
PageView(pageViewViewArray)

PageView скажет:

Тип протокола «Любой» не может соответствовать «Представлению», поскольку только конкретные типы могут соответствовать протоколам

Я буду очень признателен за любые идеи.

1 Ответ

3 голосов
/ 21 октября 2019

Попробуйте использовать стирание типа, приведя каждое представление к AnyView:

var pageViewViewArray: [AnyView] = [AnyView(TestView()), AnyView(AnotherView()), AnyView(DifferentView())]

Документация здесь и пример использования здесь .

...