Libra Studio Log

開発に関することやゲーム、ガジェットなどについてつらつらと書き記しています

曜日や日付を簡単に取得するExtension

f:id:daihase:20190809100049p:plain

こんばんは、daihaseです。

1ヶ月ぶりくらいのブログです。今日は大好きなSwiftネタを久々に。 Dateを使った日付表示とかはツール系のアプリでもよく出てきますね。 その度に毎回 let dateFormatter = DateFormatter() なんて書いてたら微妙なんで、ここはDateクラスをExtensionで拡張してどこからでも曜日や日付を取得出来るようにしてみましょう。

以下、Dateを拡張したDate+Ex.swiftになります。

import Foundation

extension Date {
    enum FormattedStyle {
        case longDate
        case longDateAndTime
        case shortDateAndTime
        case time
    }
    
    func format(with format: String) -> String {
        let formatter = DateFormatter()
        formatter.dateFormat = format
        formatter.locale = Locale(identifier: "en_US_POSIX")
        return formatter.string(from: self)
    }
    
    var formattedWeekday: String {
        let formatter = DateFormatter()
        formatter.locale = Locale(identifier: "en_US_POSIX")
        let symbol = formatter.weekdaySymbols[Calendar.current.component(.weekday, from: self) - 1] 
        switch symbol {
        case    "Sunday": return "(日)"
        case    "Monday": return "(月)"
        case   "Tuesday": return "(火)"
        case "Wednesday": return "(水)"
        case  "Thursday": return "(木)"
        case    "Friday": return "(金)"
        case  "Saturday": return "(土)"
        default: assertionFailure("error"); return ""
        }
    }
    
    func formattedDateWith(style: FormattedStyle) -> String {
        switch style {
        case .longDate:
            return format(with: "yyyy/M/d\(formattedWeekday)")
        case .longDateAndTime:
            return format(with: "yyyy/M/d\(formattedWeekday) H:mm")
        case .shortDateAndTime:
            return format(with: "M/d\(formattedWeekday) H:mm")
        case .time:
            return format(with: "H:mm")
        }
    }
}

 

formatは引数にセットする文字列のフォーマットに沿って日付データを返すメソッドです。formattedWeekdayコンピューテッドプロパティで、該当する曜日を文字列で返してくれます。最後にformattedDateWithenumで定義している内容をセットすれば、そのパターンに応じてフォーマットしてくれます。

使い方は簡単、ViewControllerでDateインスタンスを生成し、

let dateAndTime = date.formattedDateWith(style: .longDateAndTime)

 

こうしてやるだけで、2018/6/16(土) 23:24 などと表示されます。こうして拡張してやるだけで、どこからでも簡単に曜日や日付を出力出来るので便利ですよね。簡単なサンプルも以下に用意してみたので良かったら参考にしてみてください。

DateExtension Sample

それでは良い開発ライフを〜