在SwiftUI中将变量从一个视图传递到另一个视图时,环境变量不起作用
我发现了一些类似的例子,说明了如何在SwiftUI中的多个视图之间传递变量: 我尝试按照示例使用EnvironmentVariables并修改ContentView,它是在SceneDelegate中首次定义的。但是,在尝试这两个示例时,我得到错误“编译失败:'ContentView_Previews'不是'Environment'的成员类型”。我使用的是Xcode版本11.3.1 按照中给出的示例,以下是ContentView中包含的代码:在SwiftUI中将变量从一个视图传递到另一个视图时,环境变量不起作用,swiftui,swiftui-environment,Swiftui,Swiftui Environment,我发现了一些类似的例子,说明了如何在SwiftUI中的多个视图之间传递变量: 我尝试按照示例使用EnvironmentVariables并修改ContentView,它是在SceneDelegate中首次定义的。但是,在尝试这两个示例时,我得到错误“编译失败:'ContentView_Previews'不是'Environment'的成员类型”。我使用的是Xcode版本11.3.1 按照中给出的示例,以下是ContentView中包含的代码: class SourceOfTruth: Obs
class SourceOfTruth: ObservableObject{
@Published var count = 0
}
struct ContentView: View {
@EnvironmentObject var truth: SourceOfTruth
var body: some View {
VStack {
FirstView()
SecondView()
}
}
}
struct FirstView: View {
@EnvironmentObject var truth: SourceOfTruth
var body: some View {
VStack{
Text("\(self.truth.count)")
Button(action:
{self.truth.count = self.truth.count-10})
{
Text("-")
}
}
}
}
struct SecondView: View {
@EnvironmentObject var truth: SourceOfTruth
var body: some View {
Button(action: {self.truth.count = 0}) {
Text("Reset")
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView().environmentObject(SourceOfTruth())
}
}
。。。以下是SceneDelegate的内容:
import UIKit
import SwiftUI
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
var window: UIWindow?
var truth = SourceOfTruth() // <- Added
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
// let contentView = ContentView()
if let windowScene = scene as? UIWindowScene {
let window = UIWindow(windowScene: windowScene)
window.rootViewController = UIHostingController(rootView: ContentView().environmentObject(SourceOfTruth())) // <- Modified
self.window = window
window.makeKeyAndVisible()
}
}
func sceneDidDisconnect(_ scene: UIScene) {
}
func sceneDidBecomeActive(_ scene: UIScene) {
}
func sceneWillResignActive(_ scene: UIScene) {
}
func sceneWillEnterForeground(_ scene: UIScene) {
}
func sceneDidEnterBackground(_ scene: UIScene) {
}
}
导入UIKit
导入快捷键
类SceneDelegate:UIResponder,UIWindowSceneDelegate{
变量窗口:UIWindow?
var truth=SourceOfTruth()/I不依赖于Xcode版本,这不是问题。您必须在ContentView\u预览中设置ContentView
,方法与在SceneDelegate
中相同,提供.environmentObject
,如下示例所示
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView().environmentObject(_Your_object_here())
}
}
非常感谢!我尝试按照建议在ContentView\u Previews
中设置ContentView
,但我仍然收到相同的错误。我修改了帖子以包含结构的代码和SceneDelegate
以获取更多信息。我无法重现您的问题。它按预期工作(版本11.3.1)(11C504))