在初始化期间设置 class 属性 swift

setting class properties during initialization swift

我正在尝试创建两个 NSNumberFormater 对象——一个的 maximumFractionDigits 为 0,另一个的 maximumFractiongDigits 为 6。我想在初始化期间执行此操作,以便我可以重复使用这些对象。我现在拥有的是:

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)!)
    }
}

我想做的是:

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)!)
    }
}

我刚刚再次学习编码,非常感谢您的帮助。谢谢大家!

使用 initializer

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

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

你有两个选择。正如@TofuBeer 在他的回答中指出的那样,您可以使用初始化程序:

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
}

如果您不想使用初始化程序,您也可以使用闭包初始化 属性:

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

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

如果你发现你需要在你的项目中大量使用这个构造,值得指出的是你可以定义你自己的便利初始化器:

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

那么你可以这样做:

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