2017-02-28 8 views
2

String拡張のカスタムinitメソッドを追加するにはどうしたらいいですか? UPDATEDString拡張のカスタムinitを追加するには?

let price = Double(155.15) 
let formattedPrice = String(price, decimalPlaces: 2) // formattedPrice = "$155.15" 

:値型の初期化子(および変異メソッドは)単純に割り当てることができる最終的な解決策

extension String { 
    init?(currencyAmount: Double) { 
     let formatter = NumberFormatter() 
     formatter.numberStyle = .currency 
     formatter.locale = Locale(identifier: NSLocalizedString("Defaults.LocaleCurrencyFormat", comment: "currency sign")) // Defaults.LocaleCurrencyFormat equal "es_US" for US 
     let formattedAmount = formatter.string(from: NSNumber(value: currencyAmount)) ?? "" 
     self.init(formattedAmount) 
    } 
} 
+2

"* selfを' formattedString' *に設定するには?どのようにして通常どのように課題を実行しますか? (*ヒントヒント*) – Hamish

+0

@ハミッシュおかしく面白いですが、これは私が必要としたとき初めて私に起こりました。私のJavaのバックグラウンドから、私は非常に特別な、誤解を招くような考え方に追い込まれました。 – Alexander

+0

ハミッシュ、ヒントありがとうございました:D –

答えて

2

私はこのような何かを見たいと思ってその結果

extension String { 
    init(_ amount: Double, decimalPlaces: UInt) { 
     self.init() 
     let decimalFormat = "%0.\(String(decimalPlaces))f" 
     let currencyAmount = String(format: decimalFormat, amount) 
     let currencySign = NSLocalizedString("Defaults.CurrencySign", comment: "currency sign") 
     let formattedString = "\(currencySign)\(currencyAmount)" 
     // How to set self to `formattedString` ? 
    } 
} 

直接selfに:

import Foundation 

extension String { 
    init(_ amount: Double, decimalPlaces: UInt) { 
     let currencyAmount = String(format: "%\(decimalPlaces).f", amount) 
     let currencySign = NSLocalizedString("Defaults.CurrencySign", comment: "currency sign") 
     self = "\(currencySign)\(currencyAmount)" 
    } 
} 

let price = Double(155.15) 
let formattedPrice = String(price, decimalPlaces: 2) // formattedPrice = "$155.15" 
+0

)ありがとうございます。 5分後に答えてください。 –

+1

文字列補間内で文字列初期化子を使用することは冗長です –

+0

@LeoDabus元のコードをコピーしただけで通知しませんでした。一定。 – Alexander

関連する問題