NSLocaleにextensionを追加してtypoを防ぐ

Monday, March 7, 2016

NSDateFormatter等に特定のlocaleを指定したい場合に、

let formatter = NSDateFormatter()
formatter.locale = NSLocale(localeIdentifier: "en_US")

みたいにして、(この例だと “en_US” を)指定しますが、この時、文字列で指定するのがなんとなく嫌というか…。
前に、“en_US"ではなくて、 “enUS” みたいにしてしまった事があったので、その教訓も踏まえて、次のようにextensionを書いてみました。

extension NSLocale {
    enum Type: String {
        case en_US_POSIX
        case en_US
        case ja_JP
        // 必要に応じて追加
    }
    convenience init(type: Type) {
        self.init(localeIdentifier: type.rawValue)
    }
}

これで、

let formatter = NSDateFormatter()
formatter.locale = NSLocale(type: .en_US)

のように使うことができます。めでたしめでたし。

techSwiftTipsNSLocale

file_pathの扱いを楽にするFilePathConvertibleを作った

class protocolってなんぞ