在Swift中为Firebase DataStructure创建类
我是firebase的新手,为我创建了一个Firebase结构,我想要做的基本上是列出所有用户的FirebaseDB。在Swift中为Firebase DataStructure创建类
我想快速创建一个相应的类到下面的firebase数据结构。
"users" : {
"A654tdC5uBPoKQzJnpZIpwOfsaJ3" : {
"groups" : {
"-KZ7fl3I4W7YWuGk6l9k" : true,
"-KclzmvvJF54cAg14P92" : true,
"-KclzpzrJOhCOWL5_jvw" : true,
"-Kcm33N1B_oiVYrQWh3n" : true,
"-Kcm3GfRaaGfztEBmflp" : true
},
"location" : {
"coordinates" : [ 6.59086, 3.3914267 ],
"name" : "Oyebanjo Solarin Street, Lagos",
"visibility" : true
},
"photoUrl" : "http://pbs.twimg.com/profile_images/511567946351923201/YBqqKc78_normal.jpeg",
"username" : "Kamiye",
"visibilityToSelectContacts" : {
"contacts" : {
"gFTCpzgSJDOsrVKWbAJp0Z1JFXp1" : true,
"rRxT6x87kgSjTwZfa7M8ZwzdFkC3" : true
},
"visibility" : true
}
},
这就是我试图和它不工作
class LContact {
var visibliityToSelectedContacts: VisibilityToSelectContacts?
var photoUrl: String?
let username: String
var location: LALocation?
var groudId = [String]()
init (value: [String: Any]) {
self.username = value["username"] as! String
self.photoUrl = value["photoUrl"] as? String
self.location = LALocation(value: value["coordinates"] as? [String:Any] ?? [:])
self.groudId = (value["groups"] as? [String])!
}
}
class VisibilityToSelectContacts {
var contacts = [String]()
var visibility: Bool
init(value: [String: Any]) {
self.contacts = [value["contacts"] as! String]
self.visibility = value["visibility"] as! Bool
}
}
struct LALocation {
var long: Double
var lat: Double
var address: String!
var visibility: Bool!
init(long: Double, lat: Double, address: String?, visibility: Bool) {
self.long = long
self.lat = lat
self.address = address
self.visibility = visibility
}
init?(value: [String: Any]) {
guard let long = value["0"] as? Double,
let lat = value["1"] as? Double else {return nil}
self.long = long
self.lat = lat
self.address = value["name"] as? String
self.visibility = value["visibility"] as? Bool
}
}
让我来帮你解决一些可能有用的代码。这不是整个班级,但所有的概念都在那里。我也是使用简化的火力地堡结构,但同样,这些概念是相同的:
这里的火力地堡结构
users
a_uid
email: "some email"
groups
group_1: true
group_2: true
location
coords: "[52.5, 67.1]"
name: "Oyebanjo Solarin Street, Lagos"
visibility: true
username: "some username"
首先有似乎是为每个用户多数民众赞成在一个位置适合于作为一个结构。
struct LocationStruct {
var coords: String?
var name: String?
var visibility: Bool?
}
然后,我们在我们的用户类中使用该结构。在这个例子中,我们传入一个单一用户的快照来初始化类并解构它以填充类变量。
class UserClass {
var email = ""
var username = ""
var groupsDict: [String: Any]
var loc = LocationStruct()
init(snap: FIRDataSnapshot) {
let userDict = snap.value as! [String: Any]
self.email = userDict["email"] as! String
self.username = userDict["username"] as! String
self.groupsDict = userDict["groups"] as! [String: Any]
let locationDict = userDict["location"] as! [String: Any]
self.loc.coords = locationDict["coords"] as? String
self.loc.name = locationDict["name"] as? String
self.loc.visibility = locationDict["visibility"] as? Bool
}
}
下面是一个用户读取和填充UserClass的
ref.child("users").child("a_uid")
.observeSingleEvent(of: .value, with: { snapshot in
let user = UserClass(snap: snapshot)
//this code is just to show the UserClass was populated.
print(user.email)
print(user.username)
for group in user.groupsDict { //iterate over groups
print(group) //and print each one
}
print(user.loc.coords!) //print the location data
print(user.loc.name!)
print(user.loc.visibility!)
})
只有在你的结构遗留的问题,那里有一个visibilityToSelectContacts节点,其中有一个子节点接触的代码。
所以基本上在UserClass的UserDict中的高层次词典将有一个孩子叫visibilityToSelectContacts然后有具有关键的子字典中的孩子接触:的“gFTCpzgSJDOsrVKWbAJp0Z1JFXp1”值对:真。像这样
userDict
visibilityToSelectContacts
contacts
contant_0: true
contant_1: true
我会离开你得到那个结构敲定(提示:这是相同的设计模式)
谢谢,它的工作! – SimpiMind
尝试使用3D党库拆箱像this。
也检查你使用提取未来孩子如键:
LALocation(value: value["coordinates"] as? [String:Any] ?? [:])
在这里你需要:
LALocation(value: value["location"] as? [String:Any] ?? [:])
和获取数据后,不要忘记提取对象ID snapshot.key
你能澄清你的问题?你想为你的数据库结构创建一个类模型 - 搜索注册用户?搜索数组在哪里?码?在Firebase中? *它不起作用*是什么意思?你有错误吗?提交的代码似乎过于复杂,所以也许你可以简化它 - 提供更多的细节(和更短的代码)将帮助我们帮助你。另外,* A654tdC5uBPoKQzJnpZIpwOfsaJ3 *代表什么? – Jay
@Jay我已经发布了我的firebase结构的片段,我想要做的就是为上面的片段创建一个类 – SimpiMind
格式化遍布各处,真的很难阅读。我改变了我的评论。 – Jay