@StateObject vs @observedObject при прохождении извне, но принадлежит представлениюIOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 @StateObject vs @observedObject при прохождении извне, но принадлежит представлению

Сообщение Anonymous »

На основе этого ответа: в чем разница между наблюдательным и государственным объемом в Swiftui
и кодом документации Apple здесь: https://developer.apple.com/documentation/swiftui/ Управление Model-Data-in-your-app
В приложении Swiftui следует использовать обертку свойства @stateobject , когда представление экстремирует сам объект, так что объект не будет воссоздан во время обновления представления.
Тем не менее, есть тонкая линия, которая делает ее немного неясной: что, если объект создается где -то еще, но «введен» для представления < /code>, а затем представление является единственным владельцем / держатель этого объекта? Должен ли это быть @StateObject или @ObservedObject ?

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

import SwiftUI
import Combine
import Foundation

struct ViewFactory {
func makeView() -> some View {
let viewModel = ViewModel()
return NameView(viewModel)
}
}

final class ViewModel: ObservableObject {
@Published var name = ""
init() {}
}

struct NameView: View {

// Should this be an `@ObservedObject` or `@StateObject`?
@ObservedObject var viewModel: ViewModel

init(_ viewModel: ViewModel) {
self.viewModel = viewModel
}

var body: some View {
Text(viewModel.name)
}
}
на основе этой статьи: https://www.hackingwithswift.com/quick- ... mentobject
Существует одно важное различие между @stateobject и @observedObject, которое является владением - которое представление создало объект, и какое представление просто смотрит. < /p>
< EM> Правило таково: в каком бы то ни было первое, что создает ваш объект, должен использовать @StateObject, чтобы сказать Swiftui, что это владелец данных и несет ответственность за поддержание его живыми. Все остальные представления должны использовать @observedObject, чтобы сказать Swiftui, что они хотят наблюдать за объектом для изменений, но не владеют им напрямую.
Похоже, что если представление Чтобы создать viewModel , его необходимо объявить с помощью @StateObject . Мой код очень похож, единственное отличие состоит в том, что ViewModel создается в другом месте, но View «владеет» после инициализации.

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

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

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

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

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

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

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