NSWindow'a @main uygulamasından yalnızca SwiftUI kullanarak nasıl erişilir?
Bu yanıtta çözüm, Scene artı swiftUI için işe yarar.
Ancak @main'i şu şekilde kullanmak:
@main
struct MyApp: App {
@StateObject private var model = MyModel()
var body: some Scene {
WindowGroup {
Router {
AppContent()
}.environmentObject(self.model)
}
}
}
Ayrıca ana pencereyi kullanarak
var window: NSWindow? {
let window = NSApplication.shared.mainWindow
return window
}
Yine de mainWindow
her zaman geri dönernil
Güncelleme:
İhtiyacım NSWindow
nedeniyle ile uyumlu ihtiyacına ASWebAuthenticationPresentationContextProviding
bir dönüş zorunluluğu da getiriliyor ki NSWindow
. Temel olarak, şöyle bir şey yapmaya çalışıyorum:
LoginView(store: AuthStore(window: window))
Kimlik doğrulaması yapmak için nerede AuthStore
kullanılır AuthenticationServices
.
Yanıtlar
5 Asperi
Temel olarak, şöyle bir şey yapmaya çalışıyorum:
LoginView(store: AuthStore(window: window))
İşte olası yaklaşımın bir demosu (bazı çoğaltılmış varlıklarla)
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)")
}
}
Gene Simmons, KISS Çizgi Romanlarının Potansiyel Olarak "İnsanlığı Yeniden Yaratabileceğini" Söyledi
Nicole Kidman, Michael Keaton ve Val Kilmer'in Batman Olarak Paylaştığı Bu 1 Çekici Özelliğe Bayıldı
Kevin Jonas'ın Kızı Alena, Doğum Günü Fotoğrafında Büyümüş Görünüyor: '9 Yaşında Gerçek Hissetmiyor'
Charly Reynolds Yakın Zamandaki Vokal Kord Ameliyatını Açıkladı: 'Şarkı Söylemekte Sorun Yaşıyordum'