ios - 如何显示从数据库中获取的值?

标签 ios firebase swiftui

我正在使用 SwiftUI 开发 iOS 应用程序,但在显示从数据库获取的数据时遇到问题。

代码

import SwiftUI
import Firebase
import FirebaseDatabase

var ref = Database.database().reference()

class Observe {
    static func currentSingleEventObserve(completion: @escaping ((String?) -> ())) {
        let path = "supersonic/current"
        let ref = Database.database().reference().child(path)
        _ = ref.observeSingleEvent(of: .value, with: { snapshot in
            let temp = (snapshot.value! as AnyObject).description
            completion(temp)
        })
    }
}

struct CurrentDistance: View {
    var value: NSDictionary?
    var refHandle: UInt = 0

    @State var distance: String

    init() {
        Observe.currentSingleEventObserve(completion: { temp in
            self.distance = temp    // I want to mutate self.distance here
        })
    }

    var body: some View {
        VStack {
            Text("Distance")
            Text(self.distance)
        }
    }
}

struct CurrentDistance_Previews: PreviewProvider {
    static var previews: some View {
        CurrentDistance()
    }
}

数据库

|-supersonic
    |- current: 30

问题

我想变异self.distance在初始化程序中。尝试变异self.distance在关闭中我收到错误 Escaping closure captures mutating 'self' parameter ,而且我不知道如何更新该值。 如何显示从数据库中获取的值?

最佳答案

这是一个有点通用的答案,因为我们只是根据从 Firebase 读取的值来更新 UI 元素。

Firebase 是异步的,值仅在 Firebase 函数之后的闭包内有效。

假设我们有一个简单的 SwiftUI 应用程序,它显示一个 Text 对象、一个用于单击以从 Firebase 加载数据的按钮,以及一个保存文本内容的 var。

struct ContentView: View {
   @State var buttonText = "Initial Button Label"

    var body: some View {
        VStack {
            Text(buttonText)

            Button(action: {
                self.readFirebase()
            }) {
                Text("Click Me!")
            }
        }
    }

    func readFirebase() {
        let ref = my_firebase_ref
        let textRef = ref.child("string_node")
        textRef.observeSingleEvent(of: .value, with: { snapshot in
            let myText = snapshot.value as? String ?? "No String"
            self.buttonText = myText
        })
    }
}

这是我的 Firebase 结构

root
   string_node: "Hello, World"

关于ios - 如何显示从数据库中获取的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59761176/

相关文章:

swift - Xcode 11 beta swift ui 预览不显示

ios - 如何在SwiftUI中使用Core Text

iphone - 如何检查 NSString = 特定字符串值?

ios - 如何从 XMPP 获取图像?

iphone - 从核心数据获取请求中排除反向关系

android - API 'variant.getExternalNativeBuildTasks()' 已过时并已替换为 'variant.getExternalNativeBuildProviders()

ios - ios 中的 SWRevealViewController 给出桥接 header 错误

javascript - Firebase 用户 displayName 为空

android - FirebaseUi phone auth Android 出现未知错误

swift - 为什么 View.onDisappear 没有被调用?