こんばんは、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はコンピューテッドプロパティで、該当する曜日を文字列で返してくれます。最後にformattedDateWithはenumで定義している内容をセットすれば、そのパターンに応じてフォーマットしてくれます。
使い方は簡単、ViewControllerでDateインスタンスを生成し、
let dateAndTime = date.formattedDateWith(style: .longDateAndTime)
こうしてやるだけで、2018/6/16(土) 23:24 などと表示されます。こうして拡張してやるだけで、どこからでも簡単に曜日や日付を出力出来るので便利ですよね。簡単なサンプルも以下に用意してみたので良かったら参考にしてみてください。
それでは良い開発ライフを〜