NSWindow'a @main uygulamasından yalnızca SwiftUI kullanarak nasıl erişilir?
Aug 16 2020
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 mainWindowher zaman geri dönernil
Güncelleme:
İhtiyacım NSWindownedeniyle ile uyumlu ihtiyacına ASWebAuthenticationPresentationContextProvidingbir 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 AuthStorekullanılır AuthenticationServices.
Yanıtlar
5 Asperi Aug 17 2020 at 00:29
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)")
}
}
Donovan, Şarkılarından 1'ini The Beatles'ın "Lucy in the Sky with Diamonds" şarkısıyla karşılaştırdı
Gene Simmons, KISS Çizgi Romanlarının Potansiyel Olarak "İnsanlığı Yeniden Yaratabileceğini" Söyledi
Charly Reynolds Yakın Zamandaki Vokal Kord Ameliyatını Açıkladı: 'Şarkı Söylemekte Sorun Yaşıyordum'
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'