Leading zeros for Int in Swift Leading zeros for Int in Swift swift swift

Leading zeros for Int in Swift


Assuming you want a field length of 2 with leading zeros you'd do this:

import Foundationfor myInt in 1 ... 3 {    print(String(format: "%02d", myInt))}

output:

010203

This requires import Foundation so technically it is not a part of the Swift language but a capability provided by the Foundation framework. Note that both import UIKit and import Cocoa include Foundation so it isn't necessary to import it again if you've already imported Cocoa or UIKit.


The format string can specify the format of multiple items. For instance, if you are trying to format 3 hours, 15 minutes and 7 seconds into 03:15:07 you could do it like this:

let hours = 3let minutes = 15let seconds = 7print(String(format: "%02d:%02d:%02d", hours, minutes, seconds))

output:

03:15:07


With Swift 5, you may choose one of the three examples shown below in order to solve your problem.


#1. Using String's init(format:_:) initializer

Foundation provides Swift String a init(format:_:) initializer. init(format:_:) has the following declaration:

init(format: String, _ arguments: CVarArg...)

Returns a String object initialized by using a given format string as a template into which the remaining argument values are substituted.

The following Playground code shows how to create a String formatted from Int with at least two integer digits by using init(format:_:):

import Foundationlet string0 = String(format: "%02d", 0) // returns "00"let string1 = String(format: "%02d", 1) // returns "01"let string2 = String(format: "%02d", 10) // returns "10"let string3 = String(format: "%02d", 100) // returns "100"

#2. Using String's init(format:arguments:) initializer

Foundation provides Swift String a init(format:arguments:) initializer. init(format:arguments:) has the following declaration:

init(format: String, arguments: [CVarArg])

Returns a String object initialized by using a given format string as a template into which the remaining argument values are substituted according to the user’s default locale.

The following Playground code shows how to create a String formatted from Int with at least two integer digits by using init(format:arguments:):

import Foundationlet string0 = String(format: "%02d", arguments: [0]) // returns "00"let string1 = String(format: "%02d", arguments: [1]) // returns "01"let string2 = String(format: "%02d", arguments: [10]) // returns "10"let string3 = String(format: "%02d", arguments: [100]) // returns "100"

#3. Using NumberFormatter

Foundation provides NumberFormatter. Apple states about it:

Instances of NSNumberFormatter format the textual representation of cells that contain NSNumber objects and convert textual representations of numeric values into NSNumber objects. The representation encompasses integers, floats, and doubles; floats and doubles can be formatted to a specified decimal position.

The following Playground code shows how to create a NumberFormatter that returns String? from a Int with at least two integer digits:

import Foundationlet formatter = NumberFormatter()formatter.minimumIntegerDigits = 2let optionalString0 = formatter.string(from: 0) // returns Optional("00")let optionalString1 = formatter.string(from: 1) // returns Optional("01")let optionalString2 = formatter.string(from: 10) // returns Optional("10")let optionalString3 = formatter.string(from: 100) // returns Optional("100")


For left padding add a string extension like this:

Swift 5.0 +

extension String {    func PadLeft( totalWidth: Int,byString:String) -> String {    let toPad = totalWidth - self.count    if toPad < 1 {        return self    }        return "".padding(toLength: toPad, withPad: byString, startingAt: 0) + self}}

Swift 3.0 +

extension String {    func padLeft (totalWidth: Int, with: String) -> String {        let toPad = totalWidth - self.characters.count        if toPad < 1 { return self }        return "".padding(toLength: toPad, withPad: with, startingAt: 0) + self    }}

Using this method:

for myInt in 1...3 {    print("\(myInt)".padLeft(totalWidth: 2, with: "0"))}