Метод инициализации для класса Person выглядитпеременная NSDate в ноль
init (id:int64, firstName:String, lastName:String, birthDay:NSDate?)
Как вы можете видеть BirthDay является необязательным, потому что мы не всегда есть день рождения.
Данные взяты из базы данных SQLite. Тип даты не существует в SQLite, поэтому дата представляется в виде строки (которая может быть NULL). Для того, чтобы преобразовать эту строку в NSDate я создал расширение для NSDate:
extension NSDate: Value {
public class var declaredDatatype: String {
return String.declaredDatatype
}
public class func fromDatatypeValue(stringValue: String) -> NSDate {
return SQLDateFormatter.dateFromString(stringValue)!
}
public var datatypeValue: String {
return SQLDateFormatter.stringFromDate(self)
}
}
Так при создании человека:
let person = Person(id: row[id], firstName: row[first_name], lastName: row[last_name], birthDay:NSDate.fromDatatypeValue(row[birthday]!))
подведет, если строка день рождения NULL. (Я должен разворачивать строку [день рождения]!, Как ожидает неопциональные строки, и это может/не может быть изменен)
Так что моя идея состояла в том, чтобы проверить это перед созданием человека
var birthday : NSDate
if let birthdayString = row[Person.birthday] {
birthday = NSDate.fromDatatypeValue(birthdayString)
} else {
birthday=nil
}
и использование дня рождения в функции init.
НО быстры говорит мне: Не удается присвоить значение типа «ноль» до значения «NSDate»
Как это можно решить?
PS. : Я знаю, что у меня могли бы быть инициализаторы if и 2, но я бы предпочел не иметь, так как мой личный init func имеет 12 параметров (из соображений простоты я использовал только 4) и поддерживаю это пита
Проверьте мой анвер. Дайте мне знать, если это работает –