NSLocale.preferredLanguages()を使わずに、端末の使用言語が日本語かどうかを判定する

Tuesday, February 16, 2016

寝る前に少しtry! Swift Conference Appのソースをみて寝ようと思ったら、
今までみたことがなかった判定の仕方で、使用言語が日本語かどうか判定をしていたので、なるほどな〜って思って見入ってしまいました。

よく紹介されている方法だと、iOS9を考慮して、

func isJapanese() -> Bool {
    if let language = NSLocale.preferredLanguages().first?.componentsSeparatedByString("-").first {
        return language == "ja"
    }
    return false
}

と書かれることが多いのですが、try! Swift Conference Appでは、

// ソースより抜粋
let isJapanese: Bool = {
    if let languageCode = NSLocale.currentLocale().objectForKey(NSLocaleLanguageCode) as? String {
        return languageCode == "ja"
    }
    return false
}()

と書かれていました。currentLocale()に、NSLocaleLanguageCodeをkeyにして投げると言語の文字列が取得でき、更にja-JPといった文字列が返ってくるかもしれないのを考慮せずに済むので、スマートだなって思いました。
更に前回紹介したSwiftでClosureを即時実行するtipsがここでも活きていますね。
やってることとしては目新しくもなんともないですが、いつもとは違う書き方に出会うと嬉しくなりますね。
他人のソースコードを読むの大事。

一応似たような内容でQiitaにも投稿してあります。
最近どっちに投稿すればいいのか分からないのでとりあえず両方に書きだしておきます。
継続的にアウトプットしてたくさんの人に見てもらえるようにしなくては!

参考

techSwifttry!SwiftTips

Gitで登録したエイリアスの一覧を表示するエイリアスを設定する

SwiftでClosureを即時実行するtips