ios - 如何显示从数据库中获取的值?
问题描述
我正在使用 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"
推荐阅读
- java - 如何使用 Java/REST 将 Azure blob 从一个存储容器移动到另一个?
- ios - 尝试使用 NSKeyedArchiver 在 UserDefaults 中保存自定义对象
- javascript - 来自数据系列的 AMChart v4 Stacked Column Chart 宽度列
- sql - BigQuery 中转化前的访问次数,仅针对特定网址
- blazor - 如何删除默认的 0 值
- java - java.library.path 中没有 mssql-jdbc_auth-8.2.1.x64
- java - Android - 选择在线程中运行的方法
- html - 输入中允许的最大数量[文本]
- r - 为什么循环 1 到唯一值返回 1
- css - 从 Icon 包生成内容代码 - CSS