【问题标题】:How to connect asyc data fetch using Core NFC and Swift UI?如何使用 Core NFC 和 Swift UI 连接异步数据获取?
【发布时间】:2020-08-28 22:11:39
【问题描述】:

我正在尝试为我的 SwiftUI 屏幕创建一个数据模型。 我面临的问题是我使用 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
    }

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

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

【问题讨论】:

  • 什么是ObjectStruct

标签: swift swiftui combine core-nfc


【解决方案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 的某个地方依赖这个控制器成员,否则渲染引擎可能会忽略更新。

【讨论】:

    猜你喜欢
    • 2016-04-26
    • 1970-01-01
    • 1970-01-01
    • 2022-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-08
    相关资源
    最近更新 更多