我正试图为我的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")
}
NFCController
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
}
现在的问题是,嵌套的Observable对象在SwiftUI中无法工作。我试着在NFCController中做了一个观察对象,然后在这个观察对象里面创建了一个发布的观察对象,但是这个变化在SwiftUI中并没有被触发,请问有什么概念可以解决这个异步数据流的问题?
有什么概念可以解决这个异步数据流的问题吗?
这里有一个可能的方法(scratchy)
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
否则,渲染引擎可以忽略更新。