XFormatter (eXtended Formatter) creates localized strings from numbers, currencies, dates and more.
Table of Contents
- iOS 17.0+
- macOS 14.0+
- watchOS 10.0+
- tvOS 17.0+
XFormatter is available as a Swift Package.
.package(url: "https://github.com/pawello2222/XFormatter.git", .upToNextMajor(from: "1.0.0"))
let formatter = XFormatter.currency(
locale: .init(identifier: "en_US"),
currencyCode: "USD"
)
XCTAssertEqual(formatter.string(from: 326.097, abbreviation: .default), "$326.10")
XCTAssertEqual(formatter.string(from: 1432.99, abbreviation: .default), "$1.43k")
XCTAssertEqual(formatter.string(from: 100_081, abbreviation: .default), "$100.08k")
XCTAssertEqual(formatter.string(from: 4_729_432, abbreviation: .default), "$4.73m")
XCTAssertEqual(formatter.string(from: -42.811, abbreviation: .default), "-$42.81")
XCTAssertEqual(formatter.string(from: -4239.81, abbreviation: .default), "-$4.24k")
XCTAssertEqual(formatter.string(from: 123.456, sign: .arrow), "▲$123.46")
let formatter = XFormatter.decimal(
locale: .init(identifier: "en_US")
)
XCTAssertEqual(formatter.string(from: -1000), "-1,000")
XCTAssertEqual(formatter.string(from: 1000, abbreviation: .default), "1k")
XCTAssertEqual(formatter.string(from: 1000, abbreviation: .capitalized), "1K")
XCTAssertEqual(formatter.string(from: 123.456, sign: .both), "+123.46")
XCTAssertEqual(formatter.string(from: -123.456, sign: .spacedArrow), "▼ 123.46")
XCTAssertEqual(formatter.string(from: 0.123456789, precision: .default), "0.12")
XCTAssertEqual(formatter.string(from: 0.12, precision: .init(3...)), "0.120")
let formatter = XDateFormatter.date(
locale: .init(identifier: "pl_PL"),
localizedFormat: "yyyyMMddjjmmss"
)
let date = Date(year: 2000, month: 3, day: 24, hour: 16, minute: 14, second: 44)
XCTAssertEqual(formatter.string(from: date), "24.03.2000, 16:14:44")
let formatter = XDateFormatter.dateComponents(
locale: .init(identifier: "en_US")
)
let now = Date()
let future = now.adjusting(\.day, by: 2)
XCTAssertEqual(formatter.string(from: now, to: future), "48 hours")
let formatter = XDateFormatter.dateComponents(
locale: .init(identifier: "en_US")
)
let date = Date(year: 2000, month: 3, day: 24, hour: 16, minute: 14, second: 44)
let components = date.components([.hour, .minute])
XCTAssertEqual(formatter.string(from: components), "16 hours, 14 minutes")
XFormatter is available under the MIT license. See the LICENSE file for more info.