gpt4 book ai didi

swift - 如何仅使用 SwiftUI 从 @main App 访问 NSWindow?

转载 作者:行者123 更新时间:2023-12-03 15:48:08 25 4
gpt4 key购买 nike

在此 answer该解决方案适用于 Scene plus swiftUI。
但是使用@main 就像:

@main
struct MyApp: App {
@StateObject private var model = MyModel()

var body: some Scene {
WindowGroup {
Router {
AppContent()
}.environmentObject(self.model)
}
}
}
我还尝试通过使用获取主窗口
var window: NSWindow? {
let window = NSApplication.shared.mainWindow
return window
}
尽管如此, mainWindow始终返回 nil更新:
我需要 NSWindow由于需要符合 ASWebAuthenticationPresentationContextProviding有义务返回 NSWindow .基本上,我正在尝试执行以下操作:
LoginView(store: AuthStore(window: window))
哪里 AuthStore使用 AuthenticationServices执行身份验证。

最佳答案

Basically, I'm trying to do something like:

LoginView(store: AuthStore(window: window))


这是可能的方法的演示(带有一些复制的实体)
demo
class AuthStore {
var window: NSWindow

init(window: NSWindow) {
self.window = window
}
}

struct DemoWindowAccessor: View {
@State private var window: NSWindow? // << detected in run-time so optional
var body: some View {
VStack {
if nil != window {
LoginView(store: AuthStore(window: window!)) // << usage
}
}.background(WindowAccessor(window: $window))
}
}

struct WindowAccessor: NSViewRepresentable {
@Binding var window: NSWindow?

func makeNSView(context: Context) -> NSView {
let view = NSView()
DispatchQueue.main.async {
self.window = view.window // << right after inserted in window
}
return view
}

func updateNSView(_ nsView: NSView, context: Context) {}
}

struct LoginView: View {
let store: AuthStore

var body: some View {
Text("LoginView with Window: \(store.window)")
}
}

关于swift - 如何仅使用 SwiftUI 从 @main App 访问 NSWindow?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63432700/

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