SwiftUI:如何在Firestore中读取特定的文档?

12 浏览
0 Comments

SwiftUI:如何在Firestore中读取特定的文档?

我在Firestore中有一个"Users"集合,我想读取其中的一个文档。

我想要读取的文档的文档ID是一个UserUID,所以我的问题是如何读取该文档?

非常感谢帮助。

以下是我目前正在使用的代码:

Button(action: {

guard let userID = Auth.auth().currentUser?.uid else { return }

Firestore.firestore().collection("Users").getDocuments() { (querySnapshot, err) in

if let err = err {

print("获取文档时出错:\(err)")

} else {

for document in querySnapshot!.documents {

print("\(document.documentID) => \(document.data())")

}

}

}

}) {

Text("从数据库读取数据")

}

0
0 Comments

问题的出现原因是作者想要在SwiftUI中读取Firestore中特定的文档,并且检查用户密码是否正确。作者通过创建一个名为checkPassword的函数来实现这个功能。

作者在函数中首先创建了Firestore实例db,并且使用用户名作为参数来获取数据库中的特定文档。然后通过调用getDocument方法来获取文档,并使用闭包来处理返回的文档或错误信息。

在闭包中,作者首先检查文档是否存在,如果存在则输出文档的数据。作者使用map方法将文档的数据转换为字符串,并将其打印出来。然后通过使用document.get方法来获取文档中的特定字段的值。作者将获取到的密码字段的值打印出来。

如果文档不存在,则打印出"username does not exist"。

解决方法是使用Firestore的getDocument方法来获取特定文档,并通过使用document.get方法来获取文档中的特定字段的值。通过这种方式,作者可以读取特定文档并检查用户密码是否正确。

下面是整理后的文章:

在SwiftUI中,如何读取Firestore中的特定文档?

我想与大家分享我的解决方案。

我创建了一个名为checkPassword的函数,用于检查用户密码是否正确。

请注意:这是一个版本1的解决方案 - 你不应该像这样实现一个密码检查,因为它对于生产版本来说是不安全的。

func checkPassword(username : String, password : String)

{

let db = Firestore.firestore()

let docRef = db.collection("databaseUser").document("\(username)")

docRef.getDocument{(document, error) in

if let document = document, document.exists {

let dataDescription = document.data().map(String.init(describing:)) ?? "nil"

//Example output: Document data: ["password": test, "username": Test, "email": Test]

print("Document data: \(dataDescription)")

//To understand with what you are working with...

//document.data Output: Optional(["password": test, "username": Test, "email": Test])

print("\(document.data())")

//now you have the fields "password", "username" and "email". You can access every field with...

let fieldVal = document.get("password") as! String

print("Password is: \(fieldVal)")

//same with.. let fieldValTwo = document.get("username") as! String will return the next field.

} else {

print("username does not exist") //username check is before that with a separated function.

}

}

}

以上就是解决这个问题的原因和方法。通过使用Firestore的getDocument方法来获取特定文档,并通过使用document.get方法来获取文档中的特定字段的值,我们可以在SwiftUI中读取Firestore中的特定文档并检查用户密码是否正确。

0
0 Comments

SwiftUI: 如何从Firestore中读取特定的文档?

在这个问题中,用户想要知道如何从Firestore中读取特定的文档,并将其显示在SwiftUI视图中。以下是解决这个问题的原因和方法。

问题的原因:

用户想要从Firestore中读取特定的文档,但不知道如何进行查询和获取特定字段的值。

解决方法:

以下是解决这个问题的步骤:

1. 使用更具体的查询来获取特定的文档。可以使用`document()`方法,并将文档ID作为参数传递进去。

Firestore.firestore().collection("Users").document(userID).getDocument { (document, error) in

if let document = document, document.exists {

let dataDescription = document.data().map(String.init(describing:)) ?? "nil"

print("Document data: \(dataDescription)")

let fieldValue = document.get("myFieldName") as? Int

let fieldValueType2 = document.data()["myFieldName"] as? Int

} else {

print("Document does not exist")

}

}

2. 如果希望将获取到的属性存储在变量中以在视图中使用,可以设置一个变量。

struct MyView : View {

var myData: String = ""

// ...

// 在Firebase回调中:

myData = someDataFromTheFirebaseDocument

}

3. 如果在按钮回调中存储网络逻辑(例如与Firebase通信),可能会遇到一些限制和问题。可以考虑使用`ObservableObject`来处理这些调用,并在视图中访问它的属性。

struct MyView {

var firebaseConnector = FirebaseConnector()

var body: some View {

VStack {

Button(action: { firebaseConnect.apiCall() }) {

Text("Press me")

}

Text("Firebase data: \(firebaseConnector.dataToDisplay)")

}

}

}

class FirebaseConnector : ObservableObject {

@Published var dataToDisplay: String

func apiCall() {

guard let userID = Auth.auth().currentUser?.uid else { return }

Firestore.firestore().collection("Users").document(userID).getDocument { (document, error) in

if let document = document, document.exists {

let dataDescription = document.data().map(String.init(describing:)) ?? "nil"

self.dataToDisplay = dataDescription

} else {

print("Document does not exist")

}

}

}

}

通过以上步骤,用户可以从Firestore中读取特定的文档,并将其显示在SwiftUI视图中。

0