2015-08-12 4 views
3

Метод инициализации для класса 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) и поддерживаю это пита

+0

Проверьте мой анвер. Дайте мне знать, если это работает –

ответ

6

Do следующие.

var birthday : NSDate? = nil 
if let birthdayString = row[Person.birthday] { 
    birthday = NSDate.fromDatatypeValue(birthdayString) 
} 
Смежные вопросы