【发布时间】:2017-04-07 10:36:10
【问题描述】:
我是 iOS 开发的新手,我知道在初始化对象时允许使用可选值并不是一种“好公民”技术。话虽如此,我读到始终设置值是一种很好的做法,如下所示:
class Item{
var name: String
var color: String
init(name: String, color: String) {
self.name = name
self.color = color
}
}
这看起来很漂亮而且很整洁,但是我怎样才能使用 Firebase 做类似的事情呢?看看我到目前为止得到了什么:
private func loadPosts(){
databaseHandle = ref.child("users/\(self.user.uid)/posts").observe(.value, with:{(snapshot) in
var newPosts = [Post]()
for itemSnapShot in snapshot.children {
let post = Post(snapshot: itemSnapShot as! FIRDataSnapshot)
newPosts.append(post!)
}
self.posts = newPosts
self.tableView.reloadData()
})
}
这个人被放置在我的 PostsViewController 中,在那里我有我的表格视图。这是我的模型:
class Post {
var ref: FIRDatabaseReference?
var title: String?
var answer: String?
var contentUrl: String?
var photoUrl: String?
var createdAt: String?
var feeling: String?
var kind: String?
var text: String?
var uid: String?
var measurements: Dictionary<String, String>?
//MARK: Initialization
init?(snapshot: FIRDataSnapshot){
ref = snapshot.ref
let data = snapshot.value as! Dictionary<String, Any>
title = data["title"]! as? String
answer = data["answer"] as? String
contentUrl = data["content_url"] as? String
photoUrl = data["photo_url"] as? String
createdAt = data["created_at"] as? String
feeling = data["feeling"] as? String
kind = data["kind"] as? String
text = data["text"] as? String
uid = data["uid"] as? String
measurements = data["measurements"] as? Dictionary<String, String>
}
}
我不知道具体原因,但那些问号感觉不太对劲,有时我会收到一些零指针错误,我认为我应该可以通过使用“好公民”技术来避免这种情况。
那么,有人知道我如何按照 Swift 最佳实践使用 Firebase?
【问题讨论】:
标签: ios swift firebase firebase-realtime-database optional-parameters