2015-11-12 4 views
0

Я использую расширение для NSDate:Как превратить NSDate в читаемую Дату (Singleton)

extension NSDate { 
    func toDayMonthYear() -> String { 
     let formatter = NSDateFormatter() 
     formatter.dateFormat = "dd.MM.yy" 
     return formatter.stringFromDate(self) 
    } 
} 

Таким образом, я могу легко превратить любые значения NSDate

print(NSDate().toDayMonthYear) => "12.11.2015" 

Но я понимаю, что каждый раз, когда это вызвано, создается экземпляр NSDateFormatter, который является - результативным - катастрофическим ...

Как я могу сделать это более элегантно?

+0

как часто называют toDayMonthYear() ? Для обычного использования это кажется прекрасным – azimov

+0

См. Http://stackoverflow.com/questions/28504589/whats-the-best-practice-for-nsdateformatter-in-swift. –

+0

Используется очень часто. Вот почему я беспокоюсь о производительности. И это не так легко, как говорит Мартин Р, потому что я нахожусь в расширении. Я хочу этого независимого от любых других классов. –

ответ

2

Вы можете определить статическое свойство (который назначается только один раз) локально в функции или (расширение) методов, но вы должны встроить его в структуру:

extension NSDate { 

    func toDayMonthYear() -> String { 

     struct Statics { 
      static var formatter : NSDateFormatter = { 
       let fmt = NSDateFormatter() 
       fmt.dateFormat = "dd.MM.yy" 
       return fmt 
      }() 
     } 

     return Statics.formatter.stringFromDate(self) 
    } 
} 
Смежные вопросы