2016-04-27 14 views
0

In Obj-C Ich habe den folgenden Ausschnitt in einem Setter namens setTime:(NSDate *)timeStatische Variablen in Setter

static NSDateFormatter *dateFormatter; 
if (!dateFormatter) { 
    dateFormatter = [NSDateFormatter new]; 
    dateFormatter.dateFormat = @"h a"; 
} 
self.title.text = [dateFormatter stringFromDate:time]; 

Das die dateFormatter verhindert wird jedes Mal erstellt werden, die Setter genannt.

In Swift meine Setter sieht derzeit wie folgt aus:

var time:NSDate { 
    didSet { 
     let dateFormatter:NSDateFormatter = NSDateFormatter() 
     dateFormatter.dateFormat = "h a" 

     self.title.text = dateFormatter.stringFromDate(time) 
    } 
} 

Gibt es ein Äquivalent davon, wie die statische Variable in der Setter in Swift zu schaffen?

+0

Sie auch eine 'private' global machen und es mit dem Ergebnis eines Verschlusses initialisieren. – zneak

+0

Dies ist in Objective-C nicht die beste Idee. Sie sollten stattdessen einen dispatch_once() - Block verwenden, wenn Sie nach NULL suchen. – mah

Antwort

3

Sie können Ihrer Klasse eine statische Eigenschaft hinzufügen. Dadurch wird die NSDateFormatter erstellen:

private static let dateFormatter: NSDateFormatter = { 
    let df = NSDateFormatter() 
    df.dateFormat="h a" 
    return df 
}() 

und dann diese in Ihrem Setter verweisen:

var time:NSDate { 
    didSet { 
     self.text = self.dynamicType.dateFormatter.stringFromDate(time) 
    } 
}