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

问题描述 投票:0回答:1

我正试图为我的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中并没有被触发,请问有什么概念可以解决这个异步数据流的问题?

有什么概念可以解决这个异步数据流的问题吗?

swift swiftui combine core-nfc
1个回答
1
投票

这里有一个可能的方法(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否则,渲染引擎可以忽略更新。

© www.soinside.com 2019 - 2024. All rights reserved.