#swiftui #picker #combine
#swiftui #сборщик #объединить
Вопрос:
Сценарий:
- Приложение основано на вкладках; одна вкладка представляет собой представление контейнера, имеющее «Представление сборщика (данных)».
- Представление сборщика: сборщик изначально загружается с данными через @State -> @Binder.
- Представление «Главная страница» (приветствие) изначально отображается поверх представления сборщика в ZStack{}.
- Пользователь подтверждает, что первая страница исчезает, чтобы открыть представление сборщика (# 2).
Примечание: сборщик получает данные при проверке отладки.
В скрытом окне выбора отображаются исходные данные.
Проблема:Открытое представление сборщика становится пустым; после отклонения главной страницы / представления.
Ниже приведен список отладки через точку останова данных:
Наблюдение:
Я хочу получить доступ к источнику данных как можно скорее, чтобы заполнить представление сборщика, чтобы пользователь не ждал данных. Следовательно, данные сначала доступны до открытия представления сборщика.
Однако представление сборщика, по-видимому, повторно отображается непосредственно перед отображением.
Примечание: я вижу заполненную страницу выбора, если я закомментирую код первой страницы.
👉 Я добавил логический фильтр, чтобы избежать вызова сборщика с пустой полезной нагрузкой данных.
Вопрос:
Как мне сделать данные более постоянными; то есть оставаться до тех пор, пока они не будут удалены?
Должен ли я создавать конкретную копию переменной @Binding?
Комментарии:
1. Не могли бы вы предоставить воспроизводимый пример?
2. Приложение большое; я попытаюсь воссоздать его с помощью простой версии. И вернитесь.
Ответ №1:
Исправление, не связанное с SwiftUI:
Используйте синглтон для постоянного вектора данных; и, следовательно, на него не влияет срок службы управляющего представления:
final class DataSource {
static let shared = DataSource()
var myVar:String = "Hello World"
var countryNames: [String]?
}
Это настолько просто, что это элегантно.
Тем не менее, я хотел бы использовать combine здесь, но срок службы данных слишком изменчив.
Я планирую продолжить рассмотрение этой парадигмы в своем проекте, поскольку я становлюсь более опытным в Combine.
Если у кого-либо есть метод SwiftUI / Combine для доступа, хранения / совместного использования данных, который не требует одноэлементного объекта, пожалуйста, опубликуйте.