简体   繁体   中英

setting class properties during initialization swift

I'm trying to create two NSNumberFormater objects -- one with maximumFractionDigits of 0 and one with maximumFractiongDigits of 6. I would like to do this during initialization so I could use these objects repeatedly. What I have right now is:

private let formatter = NSNumberFormatter()

private var niceAccumulator : String {
    if accumulator % 1 == 0 {
        formatter.maximumFractionDigits = 0
        return String(formatter.stringFromNumber(accumulator)!)
    }
    else {
        formatter.maximumFractionDigits = 6
        return String(formatter.stringFromNumber(accumulator)!)
    }
}

What I would like to do is something along the lines of:

private let intFormatter = NSNumberFormatter(maximumFractionDigits: 0)
private let doubleFormatter = NSNumberFormatter(maximumFractionDigits: 6)

private var niceAccumulator : String {
    if accumulator % 1 == 0 {
        return String(intFormatter.stringFromNumber(accumulator)!)
    }
    else {
        return String(doubleFormatter.stringFromNumber(accumulator)!)
    }
}

I'm just learning to code again so I really appreciate the help. Thanks everyone!

You have two options. As @TofuBeer indicated in his answer, you can use an initializer:

private let intFormatter: NSNumberFormatter
private let doubleFormatter: NSNumberFormatter

init() {
    intFormatter = NSNumberFormatter()
    intFormatter.maximumFractionDigits = 0
    doubleFormatter = NSNumberFormatter()
    doubleFormatter.maximumFractionDigits = 6

    // Call to an appropriate super.init, assuming you are subclassing something
}

You can also initialize your property with a closure, if you prefer not to use an initializer:

private let intFormatter: NSNumberFormatter = {
    let formatter = NSNumberFormatter()
    formatter.maximumFractionDigits = 0
    return formatter
}()

private let doubleFormatter: NSNumberFormatter = {
    let formatter = NSNumberFormatter()
    formatter.maximumFractionDigits = 6
    return formatter
}()

If you find you need to use this construct a lot in your project, it is worth pointing out that you can define your own convenience initializer:

extension NSNumberFormatter {
    convenience init(maximumFractionDigits: Int) {
        self.init()
        self.maximumFractionDigits = maximumFractionDigits
    }
}

Then you can do:

private let intFormatter = NSNumberFormatter(maximumFractionDigits: 0)
private let doubleFormatter = NSNumberFormatter(maximumFractionDigits: 6)

Use an initializer

private let intFormatter = NSNumberFormatter()
private let doubleFormatter = NSNumberFormatter()

init() 
{
    intFormatter.maximumFractionDigits = 0
    doubleFormatter.maximumFractionDigits = 6
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM