Phytochrome
Phytochrome

Reputation: 125

Static Variables in Setter

In Obj-C I have the following snippet in a setter called setTime:(NSDate *)time

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

This prevents the dateFormatter to be created every time the setter is called.

In Swift my setter currently looks like this:

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

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

Is there an equivalent of how to create the static variable in the setter in Swift?

Upvotes: 0

Views: 187

Answers (1)

Paulw11
Paulw11

Reputation: 114875

You can add a static type property to your class. This will create the NSDateFormatter:

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

and then refer to this in your setter:

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

Upvotes: 3

Related Questions