開発環境
> xcodebuild -version Xcode 14.0 Build version 14A5228q
Xcodeはbetaだが本記事の内容はiOS16未満のAPIを使用。 本記事からXcode 14 beta 3。
モチベーション
先日Sequenceのformatted()を試した時にDateもformatted()が使えるようになっていたので、自作アプリ(tokizuoh/contrail)で使ってみる。
Pull Request
今まで
今までのDate→String変換は以下のようなextensionを生やして使っていた。
import Foundation extension Date { enum StringFormat { case yyyyMMddPd } func string(format: StringFormat) -> String { let formatter = DateFormatter() formatter.calendar = Calendar(identifier: .gregorian) switch format { case .yyyyMMddPd: formatter.dateFormat = "yyyy.MM.dd" } return formatter.string(from: self) } } let now = Date() now.string(format: .yyyyMMddPd) // -> 2022.07.12
こうした
let now = Date() now.formatted(.dateTime.year().month(.twoDigits).day(.twoDigits)).replacingOccurrences(of: "/", with: ".") // -> 2022.07.13
読みにくくなっていない?
記述量は多くなったが、パッと見でどういう変換がされるかが分かりやすくなった。 また、DateFormatterのインスタンスが変換毎に生成されなくなったのでメモリの観点でパフォーマンスは良くなってそう。