Я ищу лучший способ структурирования класса с отказоустойчивым инициализатором удобства с дополнительными параметрами. Текущий код:Неудачный инициализатор удобства с дополнительными параметрами
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 объекта (удобство инициализации). Если какой-либо из вариантов не работает в удобном init, я бы хотел, чтобы он завершился неудачей.
В настоящее время, он не будет строить, потому что:
Все сохраненные свойства экземпляра класса должны быть инициализированы перед возвращением ноль из инициализаторе
Не уверен, что я пропускаю.
Любые мнения относительно лучшего способа приблизиться к этому приветствуются.