茨城県つくば市でモバイルアプリ(iPhone、Android)のプログラミングをする日記です。あとWordPress、Raspberry Pi、Arduinoなど。

モバイルアプリ開発@つくば

【Swift】元号を取得するライブラリ「Wareki」を作ってみた

投稿日:2017年4月6日 更新日:

こんにちは、okuzawatsです。
最近、仕事ではSwiftでiOSアプリを開発しています。

仕事で出会ったSwiftのコードで、「平成」や「昭和」など、元号の扱いがひどいものがありました。
これは如何なものか、と思って使えそうなライブラリがないかと探しましたが、特に見つかりませんでした。

無いものは作る、ということで軽い気持ちでライブラリの開発に取り掛かり始めたのが先週のことです。
ライブラリを作る、というのは初めてなので、探り探りやっています。

現状、どのような機能があれば便利なのか、どのような値を返せば使いやすいのか、探っている段階です。
十分に機能を作り込めたらCarthageやCocoapodsへライブラリを公開したいと思っていますが、まだ先の話ですね。

以下、Swiftで元号を扱うためのライブラリ「Wareki」の開発状況についてお知らせします。
進捗があれば、随時、この記事を更新していきたい所存です。
よろしくお願いします。

Swift用ライブラリ「Wareki」

Swiftで元号を扱うためのライブラリ「Wareki」はGitHubに公開しています。
スターをつけてもらえると嬉しいです!

okuzawats/Wareki: Swift library that converts Christian-Era and Wareki, Japanese-Era.

Wareki/Wareki.swiftをXcodeのプロジェクトに放り込めば使えるようになります。

「Wareki」の使い方

「Wareki」の使い方を説明します。

現在のところ、staticなメソッドしかないのでインスタンス化は不要です。
メソッドは、現状、getGengo()の一種ですが、オーバーロードしてあり、いくつかの種類の引数に対応しています。
返り値はすべてString型です。
明治から平成、及び平成の次に来る「新元号」までに対応しています。
それ以外の元号の扱いについては、まだ検討している段階です。

まず、引数なしでgetGengo()を呼ぶと、その日の元号を返します。
こんな感じで呼ぶと、Stringで「平成」という文字列が返ってきます。

Wareki.getGengo() //=>平成

引数としてDateを渡した場合、当該日時の元号をStringで返します。

let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
let date:Date = formatter.date(from: "1988-07-18 12:30:00")!
let dateString:String = Wareki.getGengo(date: date) //=>昭和

引数にInt型の数字(西暦)を与えると、対応する年号を返します。
西暦に対して複数の年号が対応する場合は、新しい年号を返します。

Wareki.getGengo(year: 1912) //=>大正

西暦と元号の変換は必要だと思っていましたが、元号の切れ目は年の途中にあるので、どうしようかと悩みました。
例えば、1989年は昭和と平成にまたがっているため、「1989」という入力に対して、どのような値を出力すればいいのか?ということです。

これについては、「決め」の問題ということにして、新しい元号を使うことにしました。

現状、入力値に対して元号を文字列で返すだけのライブラリになっています。

まとめ

以上、Swiftで元号を扱うライブラリ「Wareki」の開発状況です。

まだどういう需要があるのかあまり良くわからないので、見切り発車しているところがあります。
GitHubにソースを公開しているので、こういう機能が欲しいとか、プルリクエストとか、いただけると嬉しいです。

okuzawats/Wareki: Swift library that converts Christian-Era and Wareki, Japanese-Era.

よろしくお願いします。

-作ったもの

Copyright© モバイルアプリ開発@つくば , 2017 AllRights Reserved Powered by AFFINGER4.