しずおかオンラインでアプリ開発をしているkazuomatzです。アプリでイベント情報などを表示する際に、土日や祝日をわかりやすく表示すると、ユーザーにとってわかりやすいですね。
そんな時に利用できるライブラリを公開しました。

インストール
CocoaPodsで使用する場合は、PodFileに以下を記述します。
pod 'SwiftyHolidayUtil'
使用方法
UILabelのExtensionで実装しているため、簡単に使用することができます。
import SwiftyHolidayUtil
let label:UILabel = UILabel()
label.frame = CGRect(x: 0, y: 0, width: 200, height: 20)
label.date = Date()
もし、iPhoneの使用言語が英語で地域がアメリカで設定されている場合(en_US)、以下のように表示されます。

DateStyleの設定
日付のスタイル(SwiftyHolidayUtil.dateStyle)を指定できます。
dateStyle |
---|
.short |
.medium (default) |
.long |
.custom(customFormat:String) |
label.dateStyle = .short
label.date = Date()

label.dateStyle = .long
label.date = Date()

Localeの設定
ロケールの設定が可能です。書式は言語コードに、祝日の判定と、土・日・祝日の色の表示は、地域コード(Regionコード)によって決定されます。
label.locale = Locale(identifier: "ja_JP")
label.dateStyle = .long
label.date = Date()

label.locale = Locale(identifier: "ja_JP")
label.dateStyle = .mediunm
label.date = Date()

Options
SwiftyHolidayUtil.holidayFormatOptions
FormatOptionKey | value |
---|---|
.holidayColor | UIColor or HexString (ex. "#FF0000") |
.saturdayColor | UIColor or HexString |
.sundayColor | UIColor or HexString |
.weekSymbolType | WeekSymbolType.standalone / .short / .veryshort |
.weekPosision | WeekPosition.head / .tail |
.shortWeekPrefix | String : dateStyle: .long の場合の接頭辞を指定します。 |
.shortWeekSuffix | String : dateStyle: .long の場合の接尾辞を指定します。 |
.mediumWeekPrefix | String : dateStyle: .medium の場合の接頭辞を指定します。 |
.mediumWeekSuffix | String : dateStyle: .medium の場合の接尾辞を指定します。 |
.longWeekPrefix | String : dateStyle: .long の場合の接頭辞を指定します。 |
.longWeekSuffix | String : dateStyle: .long の場合の接尾辞を指定します。 |
.timeStyle | TimeStyle.long / .medium / .short / .none(default) / .full / .custom(customFormat: String) |
label.locale = Locale(identifier: "ja_JP")
label.dateStyle = .mediunm
label.holidayFormatOptions = [
.holidayColor: "#077705",
.mediumWeekPrefix: "【",
.mediumWeekSuffix: "】",
.weekPosision: SwiftyHolidayUtil.WeekPosition.head
]
label.date = Date()

表示色について
日本は土曜日は青、日曜・祝日は赤が慣例ですが、他の国は千差万別だと思います。
リージョン毎で設定できるように作ってあるので、以下のような組み合わせで初期値として実装が可能です。
プルリクください。
- HolidayUtil+defaulRegionOptions.swift
"JP": [
FormatOptionKey.saturdayColor: UIColor.blue,
FormatOptionKey.sundayColor: UIColor.red,
FormatOptionKey.holidayColor: UIColor.red
]
祝日の判定ロジック
現在は日本の判定ロジック(fumiyasacさんのfumiyasac/handMadeCalendarOfSwift)のみを実装しています。
USと韓国とベトナムの暫定コードを実装していますが、このコードは2019年しか正しく動作しません。
各国の祝日判定のロジックがあれば実装してもらえたらと思います。