【发布时间】:2015-03-16 19:52:45
【问题描述】:
我正在寻找使用带有可选参数的可失败的便利初始化程序来构造类的最佳方法。当前代码:
class Member: NSObject {
var uid: String
let avatarURL: NSURL
let created: NSDate
let email: String
let name: String
let provider: String
var posts = [Post]()
var comments = [Comment]()
// Initialize a member with raw data
init(uid: String, avatarURL: NSURL, created: NSDate, email: String, name: String, provider: String){
self.uid = uid
self.avatarURL = avatarURL
self.created = created
self.email = email
self.name = name
self.provider = provider
super.init()
}
convenience init?(snapshot: FDataSnapshot){
if let uid = snapshot.key {
if let avatarURLString = snapshot.value["avatarURL"] as? String {
if let avatarURL = NSURL(string: avatarURLString) {
if let memberCreated = snapshot.value["created"] as? NSDate {
if let memberEmail = snapshot.value["email"] as? String {
if let memberName = snapshot.value["name"] as? String {
if let memberProvider = snapshot.value["provider"] as? String {
self.init(uid: uid, avatarURL: avatarURL, created:memberCreated, email: memberEmail, name: memberName, provider: memberProvider)
}
}
}
}
}
}
}
return nil
}
}
我需要手动初始化成员 (init) 或通过传递 Firebase 对象(方便初始化)。如果任何选项在便利初始化中失败,我希望它失败。
目前,它不会构建,因为:
类实例的所有存储属性必须在从初始化程序返回 nil 之前初始化
不知道我错过了什么。
欢迎对解决此问题的更好方法提出任何意见。
【问题讨论】:
-
guard声明确实是很好的改进...
标签: swift