LoginSignup
5
1

More than 5 years have passed since last update.

【Swift】祝日・土日をハイライト表示するライブラリ

Last updated at Posted at 2019-01-29

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

そんな時に利用できるライブラリを公開しました。

SwiftyHolidayUtil - GitHub

インストール

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)、以下のように表示されます。

2019-01-28 22 36 13

DateStyleの設定

日付のスタイル(SwiftyHolidayUtil.dateStyle)を指定できます。

dateStyle
.short
.medium (default)
.long
.custom(customFormat:String)
label.dateStyle = .short
label.date = Date()

2019-01-28 22 44 20

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

2019-01-28 22 46 00

Localeの設定

ロケールの設定が可能です。書式は言語コードに、祝日の判定と、土・日・祝日の色の表示は、地域コード(Regionコード)によって決定されます。

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

2019-01-28 22 49 47

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

2019-01-28 22 50 36

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()

2019-01-28 23 41 09

表示色について

日本は土曜日は青、日曜・祝日は赤が慣例ですが、他の国は千差万別だと思います。
リージョン毎で設定できるように作ってあるので、以下のような組み合わせで初期値として実装が可能です。
プルリクください。

  • HolidayUtil+defaulRegionOptions.swift
"JP": [
            FormatOptionKey.saturdayColor: UIColor.blue,
            FormatOptionKey.sundayColor: UIColor.red,
            FormatOptionKey.holidayColor: UIColor.red
        ]

祝日の判定ロジック

現在は日本の判定ロジック(fumiyasacさんのfumiyasac/handMadeCalendarOfSwift)のみを実装しています。

USと韓国とベトナムの暫定コードを実装していますが、このコードは2019年しか正しく動作しません。
各国の祝日判定のロジックがあれば実装してもらえたらと思います。

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1