问题描述
我尝试在新的Xcode 12项目中使用this方法(请参阅链接)作为创建SwiftUI应用程序登录页面的方法,但是我遇到了一个问题,即不知道要添加什么到主菜单中应用程序结构。我还是一个初学者,尝试将ContentView().environmentObject(ViewRouter())
添加到主应用程序结构的WindowGroup中。我是完全错误的还是Xcode为什么不建立视图?有人可以帮忙吗?
在工作代码段下方:
import SwiftUI
import Foundation
import Combine
class SceneDelegate: UIResponder,UIWindowSceneDelegate {
var window: UIWindow?
func scene(_ scene: UIScene,willConnectTo session: UIScenesession,options connectionoptions: UIScene.Connectionoptions) {
if let windowScene = scene as? UIWindowScene {
let window = UIWindow(windowScene: windowScene)
window.rootViewController = UIHostingController(rootView: MotherView().environmentObject(ViewRouter()))
self.window = window
window.makeKeyAndVisible()
}
}
. . .
}
class ViewRouter: ObservableObject {
let objectwillChange = PassthroughSubject<ViewRouter,Never>()
var currentPage: String = "page1" {
didSet {
withAnimation() {
objectwillChange.send(self)
}
}
}
}
struct MotherView : View {
@EnvironmentObject var viewRouter: ViewRouter
var body: some View {
vstack {
if viewRouter.currentPage == "page1" {
ContentViewA()
} else if viewRouter.currentPage == "page2" {
ContentViewB()
.transition(.scale)
}
}
}
}
struct ContentViewA : View {
@EnvironmentObject var viewRouter: ViewRouter
var body: some View {
Button(action: {self.viewRouter.currentPage = "page2"}) {
Text("Login")
}
}
}
struct ContentViewB : View {
@EnvironmentObject var viewRouter: ViewRouter
var body: some View {
Button(action: {self.viewRouter.currentPage = "page1"}) {
Text("logout")
}
}
}
现在,我想用Xcode 12样式替换SceneDelegate,但是以下方法不起作用。知道为什么吗?
@main
struct TestApp: App {
var body: some Scene {
WindowGroup {
MotherView().environmentObject(ViewRouter())
}
}
}
解决方法
请尝试下一步:
-
删除整个SceneDelegate类(在您的情况下,不需要SceneDelegate类)
-
修改您的ViewRouter类,例如:
ViewRouter类:ObservableObject { @Published var currentPage:字符串=“ page1” }