Swiftui: Передайте @published infing <navigationPath>, не передавая ссылку на экземпляр класса, который владеет исходнымIOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Swiftui: Передайте @published infing <navigationPath>, не передавая ссылку на экземпляр класса, который владеет исходным

Сообщение Anonymous »

swiftui. < /p>
У меня есть представление, которое содержит навигационное сопротивление, которое принимает аргумент «Путь» типа: привязка < /code>.
(i 'M Планируйте использовать это представление в качестве контейнера навигации.) > Класс, который владеет фактической @publised переменной. Я хочу сделать это более гибким. < /P>
Рабочее, но жесткое решение: < /p>

Код: Выделить всё

struct ContainerView: View {
@ObservedObject var router: Router
let initialView: InitialView

var body: some View {
NavigationStack(path: $router.path) {
self.initialView
.navigationDestination(for: NavigationDestination.self) { destination in
switch destination {
case .mainScreen:
Text("Error")
.onAppear() {
assertionFailure()
}
case .details(let detailsView):
detailsView
}
}
}
}
}
Что я попробовал:
Я думал, что смогу вручную создать вычисленное свойство привязки типа из @published переменная типа [NavigationDestination] в классе маршрутизатора Как это:

Код: Выделить всё

var pathBinding: Binding {
let binding = Binding(
get: { self.path },
set: { self.path = $0 }
)
return binding
}
… и передайте его в мой ContainErview , чтобы он выглядел так:

Код: Выделить всё

struct ContainerView: View {
var path: Binding
let initialView: InitialView

var body: some View {
NavigationStack(path: path) {
self.initialView
.navigationDestination(for: NavigationDestination.self) { destination in
switch destination {
case .mainDiscoveryScreen:
Text("Error")
.onAppear() {
assertionFailure()
}
case .details(let detailsView):
detailsView
.onAppear() {
print("Details shown")
}
}
}
}
}
}
< /code>
Создание представления: < /p>
let discoveryContainerView = DiscoveryContainerView(path: pathBinding, initialView: suggestionsView)
< /code>
Этот код скомпилирован, но не работал. Когда исходная переменная пути изменилась, ничего не произошло. Это означает, что я не мог создать протокол со свойством @published 
. Переменная в contavErview , где она ожидается как привязка , из класса ObservableObject , который владеет им как @publised var path: [navigationdestination] , без прохождения ссылка на сам экземпляр класса?

Подробнее здесь: https://stackoverflow.com/questions/794 ... a-referenc
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»