gpt4 book ai didi

ios - 在 SwiftUI 中,我可以在不在 SceneDelegate 中传递 @EnvironmentObject 吗?喜欢在任何 View 中传递它

转载 作者:行者123 更新时间:2023-12-01 16:01:37 25 4
gpt4 key购买 nike

我的问题很简单,因为@EnvironmentObject 可用于在多个 View 之间共享对象,并且在几乎所有教程中,@EnvironmentObject 对象都被设置并像这样在 SceneDelegate 中传递:

let userSettings = UserSettings()
let contentView = UserSettingsDemo().environmentObject(userSettings)
window.rootViewController = UIHostingController(rootView: contentView)

我可以不在 SceneDelegate 中传递我的 @EnvironmentObject 对象,而是在任何其他 View 中传递吗?
例如在 UserSettingsDemo.swift 中:
struct UserSettingsDemo: View {
var userSettings: UserSettings

var body: some View {
VStack {
//this is child view, and it may have other child views inside it,
//Like I said, I pass the @EnvironmentObject userSettings here as the
//start point, not in the SceneDelegate, so that FancyScoreView's child views
//can use userSettings as @EnvironmentObject
FancyScoreView().environmentObject(userSettings)
}
}

}

我可以像上面所说的那样使用 @EnvironmentObject 吗?
我问这个问题的原因是,在很多情况下,我们不能或不可能将我们认为是“全局”的所有内容传递给 SceneDelegate。有时我们只能在中途得到一些需要全局化的东西。有时在应用程序的起点传递所有全局内容甚至是一种不好的做法。

最佳答案

.environmentObject修饰符返回 some View ,所以是的,你可以。

/// Supplies an `ObservableObject` to a view subhierachy.
///
/// The object can be read by any child by using `EnvironmentObject`.
///
/// - Parameter bindable: the object to store and make available to
/// the view's subhiearchy.
@inlinable public func environmentObject<B>(_ bindable: B) -> some View where B : ObservableObject

关于ios - 在 SwiftUI 中,我可以在不在 SceneDelegate 中传递 @EnvironmentObject 吗?喜欢在任何 View 中传递它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59132979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com