2016-05-18 1 views
3

У меня есть дата форматировщик Я пытаюсь создать как одноэлементная в пределах UITableViewCell подкласса поэтому я создал вычисляемое свойство как это:Статических вычисленные переменным получает экземпляр больше, чем когда-то

private static var dateFormatter: NSDateFormatter { 
    print("here here") 
    let formatter = NSDateFormatter() 
    formatter.dateFormat = "EEEE h a" 
    return formatter 
} 

Проблема заключается в том что я вижу оператор печати более одного раза, а это значит, что он создается не один раз. Я нашел другие способы сделать это (например, вставить внешний класс или метод класса), но я хотел бы понять, что здесь происходит. Есть идеи?

ответ

6

Ваш фрагмент кода эквивалентно свойству Get-только, в основном это то же самое, как:

private static var dateFormatter: NSDateFormatter { 
    get { 
     print("here here") 
     let formatter = NSDateFormatter() 
     formatter.dateFormat = "EEEE h a" 
     return formatter 
    } 
} 

Если вы хотите, чтобы это запускайте, как только вы должны определить его так же, как вы бы определили ленивое свойство:

private static var dateFormatter: NSDateFormatter = { 
    print("here here") 
    let formatter = NSDateFormatter() 
    formatter.dateFormat = "EEEE h a" 
    return formatter 
}() 
+0

Вы имеете в виду частный ленивый var dateFormatter: NSDateFormatter? –

+2

Нет, статические свойства уже ленивы – dan

0

Ваш статический var не является одиночным, это просто метод класса, который создает и возвращает экземпляр форматирования даты.

Проверьте эти ответы, как создать настоящий sungleton: Using a dispatch_once singleton model in Swift