2016-05-23 3 views
0

Я пытаюсь создать два объекта NSNumberFormater - один с максимумомFractionDigits 0 и один с maxFractiongDigits 6. Я хотел бы сделать это во время инициализации, чтобы неоднократно использовать эти объекты. То, что я прямо сейчас:Свойства объекта класса при инициализации swift

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

Я только учусь код еще раз, так что я очень ценю помощь. Всем спасибо!

ответ

1

У вас есть два варианта. Как @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 
}() 
+0

Закрытие - это именно то, как я хотел бы это сделать. Спасибо за помощь! –

+0

@ RyanWaldorf Рад, что это помогло, не забудьте выбрать ответ правильно, если на ваш вопрос был дан ответ. –

0

Используйте initializer

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

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

Спасибо за помощь TofuBeer! –

1

Если вы нашли вы должны использовать эту конструкцию много в вашем проекте, стоит отметить, что вы можете определить свой собственный удобства инициализатору:

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

Тогда вы можете сделать:

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

Спасибо за помощь. Роб! –

+0

Кстати, поскольку вы новичок в Stack Overflow, я укажу, что вы, вероятно, должны принять ответ. См. [Что делать, если кто-то отвечает на мой вопрос?] (Http://stackoverflow.com/help/someone-answers). Я бы предложил принять ответ Чарльза. Я просто пытался дополнить его еще одной альтернативой. – Rob

Смежные вопросы