我如何处理 Swift 中的字典 3
How could I handle dictionary in Swift 3
我是初学者,使用 firebase 我从 firebase 数据库加载了一个字典,如下所示:
["bkayfdbUpJXDEpVF8WWl362amct2": {
Email = "s@s.com";
Name = "abce";
Username = "abce";
}, "4gQHKfSAHmXU5q7rOP45OeN8yrz1": {
Email = "f@f.com";
Name = "abcq";
Username = "abcq";
}, "OI0ppw6jSeW4Ao2nRff8Yq9uk162": {
Email = "a@a.com";
Name = "asd";
Username = "asd";
}, "zbNvoAmunpVUkeQtt09r2RLaSqv1": {
Email = "d@d.com";
Name = "abcs";
Username = "abcs";
}]
我想打印此密钥“4gQHKfSAHmXU5q7rOP45OeN8yrz1”中存在的用户名我尝试了以下代码,但它不起作用
let refContacts = FIRDatabase.database().reference().child("allUsers")
refContacts.observeSingleEvent(of: .value, with: { (snapshot) in
if let contactsDic = snapshot.value as? Dictionary<String,Any> {
print(contactsDic[0]["4gQHKfSAHmXU5q7rOP45OeN8yrz1"].["Name"]])
} else {
}
})
此外,我想将所有用户名存储在一个数组中,该怎么做?
您将几个问题集中在一起,所以我将用代码来解决它们。以下代码可以缩短;为了显示流程,我把它留得有点冗长,而且我还进行了一些错误检查,这可以改进。
请注意,为了简洁起见,我替换了 uid_0 和 uid_1 的关键字。
//a class to store the firebase data in an array
class ContactClass {
var key = ""
var email = ""
var name = ""
var username = ""
convenience init(fromSnapshot snap: DataSnapshot) {
self.init()
self.key = snap.key
if let dict = snap.value as? [String: Any] {
let e = dict["Email"] as? String ?? ""
let n = dict["Name"] as? String ?? ""
let u = dict["Username"] as? String ?? ""
self.email = e
self.name = n
self.username = u
}
}
}
var contactArray = [ContactClass]() //array to hold data read from Firebase
//read all of the contacts, create a class for each and store in an array
//then print their keys and filter the array for a specific key and print the name
func contactAction() {
let refContacts = self.ref.child("allUsers")
refContacts.observeSingleEvent(of: .value, with: { (snapshot) in
for child in snapshot.children {
let childSnap = child as! DataSnapshot
let contact = ContactClass(fromSnapshot: childSnap)
self.contactArray.append(contact)
}
for c in self.contactArray {
print(c.key) //prints uid_0 and uid_1
}
let filteredContactResult = self.contactArray.filter { [=10=].key == "uid_1"}
if let firstResult = filteredContactResult.first {
let name = firstResult.name
print(name) //prints asd
}
})
可能有 100 种其他方法可以完成这些相同的任务;此方法将保持顺序并使过滤读取的数据变得非常容易。
哦 - 您使用的是旧版本的 Firebase(由于 FIRDatabase),因此最好也将您的 Firebase 升级到当前版本。
上面代码中使用的self.ref是一个指向我的Firebase的class变量。
我是初学者,使用 firebase 我从 firebase 数据库加载了一个字典,如下所示:
["bkayfdbUpJXDEpVF8WWl362amct2": {
Email = "s@s.com";
Name = "abce";
Username = "abce";
}, "4gQHKfSAHmXU5q7rOP45OeN8yrz1": {
Email = "f@f.com";
Name = "abcq";
Username = "abcq";
}, "OI0ppw6jSeW4Ao2nRff8Yq9uk162": {
Email = "a@a.com";
Name = "asd";
Username = "asd";
}, "zbNvoAmunpVUkeQtt09r2RLaSqv1": {
Email = "d@d.com";
Name = "abcs";
Username = "abcs";
}]
我想打印此密钥“4gQHKfSAHmXU5q7rOP45OeN8yrz1”中存在的用户名我尝试了以下代码,但它不起作用
let refContacts = FIRDatabase.database().reference().child("allUsers")
refContacts.observeSingleEvent(of: .value, with: { (snapshot) in
if let contactsDic = snapshot.value as? Dictionary<String,Any> {
print(contactsDic[0]["4gQHKfSAHmXU5q7rOP45OeN8yrz1"].["Name"]])
} else {
}
})
此外,我想将所有用户名存储在一个数组中,该怎么做?
您将几个问题集中在一起,所以我将用代码来解决它们。以下代码可以缩短;为了显示流程,我把它留得有点冗长,而且我还进行了一些错误检查,这可以改进。
请注意,为了简洁起见,我替换了 uid_0 和 uid_1 的关键字。
//a class to store the firebase data in an array
class ContactClass {
var key = ""
var email = ""
var name = ""
var username = ""
convenience init(fromSnapshot snap: DataSnapshot) {
self.init()
self.key = snap.key
if let dict = snap.value as? [String: Any] {
let e = dict["Email"] as? String ?? ""
let n = dict["Name"] as? String ?? ""
let u = dict["Username"] as? String ?? ""
self.email = e
self.name = n
self.username = u
}
}
}
var contactArray = [ContactClass]() //array to hold data read from Firebase
//read all of the contacts, create a class for each and store in an array
//then print their keys and filter the array for a specific key and print the name
func contactAction() {
let refContacts = self.ref.child("allUsers")
refContacts.observeSingleEvent(of: .value, with: { (snapshot) in
for child in snapshot.children {
let childSnap = child as! DataSnapshot
let contact = ContactClass(fromSnapshot: childSnap)
self.contactArray.append(contact)
}
for c in self.contactArray {
print(c.key) //prints uid_0 and uid_1
}
let filteredContactResult = self.contactArray.filter { [=10=].key == "uid_1"}
if let firstResult = filteredContactResult.first {
let name = firstResult.name
print(name) //prints asd
}
})
可能有 100 种其他方法可以完成这些相同的任务;此方法将保持顺序并使过滤读取的数据变得非常容易。
哦 - 您使用的是旧版本的 Firebase(由于 FIRDatabase),因此最好也将您的 Firebase 升级到当前版本。
上面代码中使用的self.ref是一个指向我的Firebase的class变量。