web-dev-qa-db-ja.com

NSLocale Swift 3

Swift 3で通貨記号を取得するにはどうすればよいですか?

public class Currency: NSObject {
    public let name: String
    public let code: String
    public var symbol: String {
        return NSLocale.currentLocale().displayNameForKey(NSLocaleCurrencySymbol, value: code) ?? ""
    }

    // MARK: NSObject

    public init(name: String, code: String) {
        self.name = name
        self.code = code
        super.init()
    }
}

NSLocaleの名前がLocaleに変更されたことは知っていますが、displayNameForKeyが削除され、localizedString(forCurrencyCode:self.code)を使用して、シンボルを取得できずに現在のロケールで通貨の名前を生成できるようです。現在のロケールで外貨記号を取得する方法を探しています。

それとも私は何かを見落としていますか?

13
I make my mark

NSLocaleは名前が変更されていませんが、まだ存在しています。 Localeは、値型ラッパーとしてSwift 3で導入された新しい型です( SE-0069可変性と基礎値型 を比較してください)。

どうやらLocaleにはdisplayName(forKey:value:)メソッドがありませんが、いつでも対応するFoundationのNSLocaleに変換できます。

public var symbol: String {
    return (Locale.current as NSLocale).displayName(forKey: .currencySymbol, value: code) ?? ""
}

その他の例:

// Dollar symbol in the german locale:
let s1 = (Locale(identifier:"de") as NSLocale).displayName(forKey: .currencySymbol, value: "USD")!
print(s1) // $

// Dollar symbol in the italian locale:
let s2 = (Locale(identifier:"it") as NSLocale).displayName(forKey: .currencySymbol, value: "USD")!
print(s2) // US$
20
Martin R
Locale.current.currencySymbol

新しいLocale型は、文字列型のプロパティのほとんどを実際のプロパティに移動しました。プロパティの完全なリストについては、 開発者ページ を参照してください。

5
keithbhunter

私はロケールの拡張機能を使用していますこれは私のコードです

extension Int {
func asLocaleCurrency(identifier: String) -> String {
    let formatter = NumberFormatter()
    formatter.numberStyle = .currency
    formatter.locale = Locale(identifier: identifier)
    return formatter.string(from: NSNumber(integerLiteral: self))!
}
}

そしてこれを使用する

var priceCount = 100000
priceCount.asLocaleCurrency(identifier: "id_ID")
2
Ridho Octanio

Swift 3

locale.regionCode

リージョンコードはdisplayNameに似ています

0
Den Jo

Localeに通貨コードのローカライズされた名前を直接取得する関数があります。NSLocaleにキャストする必要はありません。

Locale(identifier: "en-GB").localizedString(forCurrencyCode: "USD") // "Us Dollar"
Locale(identifier: "pl-PL").localizedString(forCurrencyCode: "USD") // "Dolar Amerykański"
0
sliwinski.lukas