Нужно ли мне избегать инициализации пользовательских представлений при использовании объекта состояния, который зависит IOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Нужно ли мне избегать инициализации пользовательских представлений при использовании объекта состояния, который зависит

Сообщение Anonymous »

У меня многоэтапный вопрос.
Сценарий: у меня есть список сообщений пользователей, где список содержит лишь небольшую часть информации о каждом сообщении с учетом требований к размеру. покажи список. При нажатии на каждое сообщение в списке можно расширить индивидуальную информацию, что отправляет пользователя на новую страницу, где подробно описывается только это сообщение.
Похоже, что в этой ситуации учитывая, что появился новый экран с новым пользовательским интерфейсом и бизнес-логикой, для модели представления следует использовать @stateobject для этой страницы подробного сообщения, поскольку именно это новое представление отвечает за визуализацию и перемещение этот конкретный набор данных. Первый вопрос - просто проверить это понимание... это лучше всего подходит для @stateobject, а не для @observedobject, верно? (Я не хочу использовать @environmentObject, потому что только это представление будет иметь доступ к этим данным, они не должны быть доступны для всего приложения).
Предполагая, что мой @stateobject -for-detailed-page-viewmodel верен, тогда я столкнулся со следующей проблемой. Поскольку объект состояния viewmodel будет способствовать получению данных с сервера, специфичных для выбранной записи родительского просмотра, он должен получить postID с предыдущей страницы перед своей инициализацией. Согласно ответу в этом сообщении, который ссылается на документы Apple, инициализация postID с помощью пользовательской инициализации в представлении для облегчения перехода к модели представления является хорошей практикой следующим образом:

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

struct DetailedPostPage: View {
@StateObject private var detailedPostViewModel: DetailedPostViewModel
init(postID: String) {
self.detailedPostViewModel = .init(wrappedValue: .init(postID: passedPostID))
_detailedPostViewModel = StateObject(wrappedValue: DetailedPostViewModel(postID: postID))
}
}
(Примечание... какая из двух строк в инициализации лучше?)
Однако я видел другой ответ на В отдельном вопросе говорится, что мне следует избегать пользовательских инициализаций в представлении, чтобы избежать негативного влияния на различия.
Это меня смутило. Кажется, нет никакого способа установить собственную инициализацию в представлении для модели представления stateobject, для которой требуется переданная строка. Нужно ли мне избегать этих пользовательских инициализаций или нет? Если мне это не нужно, и это на самом деле лучшая практика для этого сценария, как мне узнать, в каких сценариях его не использовать?
Изменить: этот вопрос здесь несколько похож, но не совсем мой случай... хотя ответ предполагает, что мой _detailedPostViewModel = StateObject(... может привести к странному поведению... поэтому этого следует избегать? Но как мне это сделать?

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

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

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

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

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

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

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