如何使用Core NFC和Swift UI连接asyc数据获取?



我正在尝试为我的 SwiftUI 屏幕创建一个 DataModel。 我面临的问题是我使用Core NFC扫描NFCTag(执行一些任务(,然后我想更新SwiftUI屏幕。数据获取/操作是异步进行的。

视图

struct NFCTest: View {
@EnvironmentObject var nfcController: NFCController

var body: some View {
VStack {
Button(action: {
self.nfcController.beginScanning()
}) {
Text("Button")
}

NFC主计长

final class NFCController: UIViewController, ObservableObject {
@Published var someObject :ObjectStruct //someObject contains a @Published var someVar    
//Tag detected
func doSomeAsyncCalls {
//calling functions in other swift files. runs async on another thread. Should change someVar at the end of the calculation
}

现在的问题是嵌套的可观察对象在 SwiftUI 中不起作用。我试图在NFCController中创建一个可观察的var,并在该var中创建了一个已发布的var。但更改不会在 SwiftUI 中触发。

是否有任何概念可以解决此异步数据流问题?

这是可能的方法(沙哑(

final class NFCController: UIViewController, ObservableObject {
@Published var someObject :ObjectStruct
func doSomeAsyncCalls {
// .. some other code here
DispatchQueue.global(qos: .background).async { // < mimic async call
// .. some calculations
DispatchQueue.main.async {
self.someObject.someVar = result
self.objectWillChange.send()     // << here !!
}
}
}
}

当然,相关视图应该依赖于body某处的控制器成员,否则渲染引擎可能会忽略更新。

最新更新