2015-01-01 7 views
7

以下のコードを使用して、千の区切り文字でIntをフォーマットしました。しかし、私の現在のプロジェクトは、Int64のは、同じようにフォーマットする必要があり、それはエラー「Int64型」をスローに変換できません「のNSNumber」フォーマットInt64 with thousand separators

var numberFormatter: NSNumberFormatter { 
    let formattedNumber = NSNumberFormatter() 
    formattedNumber.numberStyle = .DecimalStyle 
    formattedNumber.maximumFractionDigits = 0 
    return formattedNumber 
} 

答えて

7

あなたはこのように、上記のコードの後に​​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と同じ大きさスウィフトいるので、少し交絡です:スウィフトはNSNumberInt64からキャストされますよう

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 
    }() 
} 
+1

はいLONGLONG方法は私のためのトリックを行いました。 – Kashif

5
extension Int64 { 
    var formatted:String { 
     let formatter = NSNumberFormatter() 
     formatter.numberStyle = .DecimalStyle 
     formatter.minimumFractionDigits = 0 
     return formatter.stringFromNumber(Int(self)) ?? "" 
    } 
} 

let x:Int64 = 1000000 
x.formatted // "1,000,000" 
関連する問題