- 문화권마다 표기 방식이 다를 수 있다.
- Formatter는 이런 것들을 자동으로 해준다.
- DateFormatter
// Dates and Times
// Date with Day/Month/Year and Time
let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .medium
dateFormatter.timeStyle = .short
dateFormatter.string(from: Date())
// Day of Week + Date + Month
let dateFormatter = DateFormatter()
dateFormatter.setLocalizedDateFormatFromTemplate
("MMMMdEEEE")
dateFormatter.string(from: Date())
// Abbreviated Day of Week
// 템플릿 참고: <https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table>
let dateFormatter = DateFormatter()
dateFormatter.setLocalizedDateFormatFromTemplate
("ccccc")
dateFormatter.string(from: Date())
// Dates and Times
// Date and Time Components
let formatter = DateComponentsFormatter()
formatter.unitsStyle = .abbreviated
let components = DateComponents(hour: 2, minute: 26)
formatter.string(from: components)
// Date and Time Intervals
let formatter = DateIntervalFormatter()
formatter.dateTemplate = "dMMM"
formatter.string(from: startDate, to: endDate)
// Relative Dates and Times
let formatter = RelativeDateTimeFormatter()
formatter.dateTimeStyle = .named
formatter.localizedString(from: DateComponents(day: -1))
- MeasurementFormatter
- Unit과 Measurement를 사용하는 Formatter
// Measurements
// Temperature
let formatter = MeasurementFormatter()
let temperature = Measurement<UnitTemperature>
(value: 16, unit: .celsius)
formatter.numberFormatter.maximumFractionDigits = 0
formatter.string(from: temperature)
// Speed
let speed = Measurement<UnitSpeed>
(value: 14, unit: .kilometersPerHour)
formatter.string(from: speed)
// Pressure
let pressure = Measurement<UnitPressure>
(value: 1.01885, unit: .bars)
formatter.string(from: pressure)
- PersonNameComponentsFormatter
// Names
let formatter = PersonNameComponentsFormatter()
var nameComponents = PersonNameComponents()
nameComponents.familyName = "Iwasaki"
nameComponents.givenName = "Akiya"
nameComponents.nickname = "Aki-chan"
// Full Name
formatter.string(from: nameComponents)
// Short Name: Respects User Preferences
formatter.style = .short
formatter.string(from: nameComponents)
// Abbreviated Name
formatter.style = .abbreviated
formatter.string(from: nameComponents)
// Abbreviated Name: Monogram
formatter.style = .abbreviated
let monogram = formatter.string(from: nameComponents)
if (monogram.count <= 2) {
// Use Monogram
}
else {
// Use Icon
}
// Names
let formatter = PersonNameComponentsFormatter()
var nameComponents = PersonNameComponents()
nameComponents.familyName = "岩崎"
nameComponents.givenName = "晃也"
nameComponents.nickname = "あきちゃん"
// Full Name
formatter.string(from: nameComponents)
// Short Name: Respects User Preferences
formatter.style = .short
formatter.string(from: nameComponents)
// Abbreviated Name
formatter.style = .abbreviated
formatter.string(from: nameComponents)
// Lists
// English Localization
let items = [ "English", "French", "Spanish" ] ListFormatter.localizedString(byJoining: items)
let items = [ "English", "Spanish" ] ListFormatter.localizedString(byJoining: items)
let items = [ "Spanish", "English" ] ListFormatter.localizedString(byJoining: items)
// Spanish Localization
let items = [ "Inglés", "Español" ] ListFormatter.localizedString(byJoining: items)
let items = [ "Español", "Inglés" ] ListFormatter.localizedString(byJoining: items)
// Numbers
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
formatter.string(from: 32.768) // French (France)
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
formatter.string(from: 32.768) // Arabic (Egypt)
formatter.percentSymbol
formatter.decimalSeparator
// Numbers
let formatter = NumberFormatter()
formatter.numberStyle = .percent
formatter.string(from: 0.71) // English (US)
let formatter = NumberFormatter()
formatter.numberStyle = .percent
formatter.string(from: 0.71) // Turkish (Turkey)
- String: string은 표준적인 formatter를 쓰기 어렵다. 그래서 localizedString이나 stringDict 를 활용해야 한다.