Skip to content

stephencelis/Formatting

Repository files navigation

Formatting

Type-safe, functional string formatting in Swift.

Inspired by Chris Done's excellent Haskell library.

import Formatting

format("Hello, " % string % "!", "world")
// "Hello, world!"

Introduction

Traditional string formatting methods (interpolation, printf, and template strings) can lead to subtle (and not so subtle) runtime bugs.

print("Hello, \(thing)!")              // Hello, nil!
print("Hello, \(thing)!")              // Hello, Optional("world")!
NSLog(@"Hello, %@!", thing);           // Hello, (null)!

Formatting brings compile-time checks.

print("Hello, " % string % "!", thing) // Value of optional type String? not unwrapped

And composability.

let greet =
  format("Hello, " % string % "!")

greet("world")                         // Hello, world!

Composing formatters

Use % to build a formatter with strings and other formatters.

format(string % " is " % int % "years old.", "Alice", 25)
// "Alice is 25 years old."

Use <> to pass the previous formatter argument to the next formatter.

format(yyyy % "-" <> MM % "-" <> dd, Date())
// "2016-06-28"

Use .% to feed the result of one formatter into another.

format(left(2, "0") .% hex, 10)
// "0a"

Call format without arguments to return a curried formatter function.

let log =
  format(right(5) % " -- [" % iso8601 % "] " % string)

let infoLog = log("INFO")
let debugLog = log("DEBUG")

infoLog(Date())("Logging in...")
// "INFO  -- [2016-06-28T12:34:56Z] Logging in..."
debugLog(Date())("Logged in successfully!")
// "DEBUG -- [2016-06-28T12:34:56Z] Logged in successfully!"

License

Formatting is available under the MIT license. See the LICENSE file for more information.

Releases

No releases published

Packages

No packages published

Languages

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy