gpt4 book ai didi

swiftui - 如何在 Apple Watch 的扩展委托(delegate)中访问 SwiftUI 内容 View ?

转载 作者:行者123 更新时间:2023-12-02 19:26:13 25 4
gpt4 key购买 nike

当应用程序激活时,我需要在我的 ContentView 中调用 loadDataExtensionDelegate 是一个处理应用程序事件的类,例如 applicationDidBecomeActive。但是我不明白如何在 ExtensionDelegate 中获取 ContentView

这是我的ContentView:

struct ContentView: View {

let network = Network()

@State private var currentIndex: Int = 0
@State private var sources: [Source] = []

var body: some View {
ZStack {
// Some view depends on 'sources'
}
.onAppear(perform: loadData)
}

func loadData() {
network.getSources { response in
switch response {
case .result(let result):
self.sources = result.results

case .error(let error):
print(error)
}
}
}

}

ExtensionDelegate:

class ExtensionDelegate: NSObject, WKExtensionDelegate {

func applicationDidFinishLaunching() {

}

func applicationDidBecomeActive() {
// Here I need to call 'loadData' of my ContentView
}

func applicationWillResignActive() {
}
...

最佳答案

我认为最简单的解决方案是使用通知

ContentView

let needsReloadNotification = NotificationCenter.default.publisher(for: .needsNetworkReload)

var body: some View {
ZStack {
// Some view depends on 'sources'
}
.onAppear(perform: loadData)
.onReceive(needsReloadNotification) { _ in self.loadData()}
}

并且在 ExtensionDelegate

func applicationDidBecomeActive() {
NotificationCenter.default.post(name: .needsNetworkReload, object: nil)
}

和共享的某处

extension Notification.Name {
static let needsNetworkReload = Notification.Name("NeedsReload")
}

关于swiftui - 如何在 Apple Watch 的扩展委托(delegate)中访问 SwiftUI 内容 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62371557/

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