EnvironmentObject vs Singleton в SwiftUI? - PullRequest
1 голос
/ 22 апреля 2020

Если все виды обращаются к одной и той же модели в приложении, я думаю, что достаточно шаблона Singleton. Я прав?

Например, если MainView и ChildView обращаются к одной и той же модели (например, AppSetting), как показано ниже, я не могу найти никакой причины использовать EnvironmentObject вместо шаблона Singleton. Есть ли проблемы, если я использую это так? Если все в порядке, то когда мне следует использовать EnvironmentObject вместо шаблона Singleton?

class AppSetting: ObservableObject {
    static let shared = AppSetting()
    private init() {}

    @Published var userName: String = "StackOverflow"
}
struct MainView: View {
    @ObservedObject private var appSetting = AppSetting.shared

    var body: some View {
        Text(appSetting.userName)
    }
}
struct ChildView: View {
    @ObservedObject private var appSetting = AppSetting.shared

    var body: some View {
        Text(appSetting.userName)
    }
}

Спасибо за авансовый.

1 Ответ

2 голосов
/ 22 апреля 2020

Вы правы, в этом случае нет причин использовать EnvironmentObject. Apple даже рекомендует не использовать чрезмерно EnvironmentObject.

Тем не менее EnvironmentObject также может быть полезен, если вы используете объект во многих представлениях, потому что тогда вам не нужно передавать его из представления A в B из От B до C и т. Д.

Часто вы попадаете в ситуацию, когда даже @State и @Binding будут достаточны для обмена и обновления данных в представлении и между двумя представлениями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...