あなたはこのように、上記のコードの後にnumberFormatter.stringFromNumber(12345678)
を呼び出すときは、意味ですか?
let i = 1234567890
let n = i as NSNumber // OK
numberFormatter.stringFromNumber(i) // Also OK
// Compiler error: 'Int64' is not convertible to 'NSNumber'
let n64 = i64 as NSNumber
// so the implicit conversion will also fail:
numberFormatter.stringFromNumber(i64)
これはInt
sが通常自らInt64
Sと同じ大きさスウィフトいるので、少し交絡です:スウィフトはNSNumber
にInt64
からキャストされますよう
let i64: Int64 = 1234567890
numberFormatter.stringFromNumber(i64)
は見えません。あなたが手で
NSNumber
を構築することによってそれを回避することができます
:それはnumberFormatter
を作成するためのすべての関連するコードをカプセル化することを素敵だが、そのコードが新たにするたびに実行されます:
let n64 = NSNumber(longLong: i64)
ところでvar
トリックがあること用心あなたはそれを使用します。別の方法として、あなたがこれを行うことができます:それは構造体/クラスのプロパティの場合は
let numberFormatter: NSNumberFormatter = {
let formattedNumber = NSNumberFormatter()
formattedNumber.numberStyle = .DecimalStyle
formattedNumber.maximumFractionDigits = 0
return formattedNumber
}()
を、また、あなたのvar
のように、それ変数が使用されている場合にのみ実行されていることの追加の利点を持っているlazy var
作ることができますしかし、一度だけ。
struct Thing {
lazy var numberFormatter: NSNumberFormatter = {
println("blah")
let formattedNumber = NSNumberFormatter()
formattedNumber.numberStyle = .DecimalStyle
formattedNumber.maximumFractionDigits = 0
return formattedNumber
}()
}
はいLONGLONG方法は私のためのトリックを行いました。 – Kashif