在Swift中,整数的前导零

8 浏览
0 Comments

在Swift中,整数的前导零

我想将Swift中的Int转换为具有前导零的String。例如考虑以下代码:

for myInt in 1 ... 3 {
    print("\(myInt)")
}

目前它的结果是:

1
2
3

但我想要它是:

01
02
03

在Swift标准库中有一种干净的方法实现这个吗?

admin 更改状态以发布 2023年5月24日
0
0 Comments

在 Swift 5 中,您可以选择下面的三个示例之一来解决问题。


#1. 使用 Stringinit(format:_:) 初始化器

Foundation 为 Swift String 提供了 init(format:_:) 初始化器。 init(format:_:) 有以下声明:

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

返回一个 String 对象,该对象通过使用给定的格式字符串作为模板来初始化,并将其余的参数值替换进去。

以下 Playground 代码演示了如何使用 init(format:_:) 创建一个至少有两个整数位的 Int 格式化的 String

import Foundation
let 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. 使用 Stringinit(format:arguments:) 初始化器

Foundation 为 Swift String 提供了 init(format:arguments:) 初始化器。 init(format:arguments:) 有以下声明:

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

返回一个 String 对象,该对象通过使用给定的格式字符串作为模板来初始化,并根据用户的默认语言环境替换其余的参数值。

以下 Playground 代码演示了如何使用 init(format:arguments:) 创建一个至少有两个整数位的 Int 格式化的 String

import Foundation
let 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. 使用 NumberFormatter

NumberFormatter 由 Foundation 提供。苹果对它的解释如下:

NSNumberFormatter实例对包含NSNumber对象的单元格的文本表示进行格式化,并将数值的文本表示转换为NSNumber对象。表示包括整数、浮点数和双精度浮点数;浮点数和双精度浮点数可以格式化为指定的小数位数。

下面的Playground代码显示了如何创建一个NumberFormatter,它返回至少有两位整数数字的IntString?

import Foundation
let formatter = NumberFormatter()
formatter.minimumIntegerDigits = 2
let 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")

0
0 Comments

假设您想要一个长度为2的字段,在前面补零,您可以这样做:

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

输出:

01
02
03

这需要import Foundation,因此从技术上讲,它不是Swift语言的一部分,而是Foundation框架提供的一个功能。请注意,import UIKitimport Cocoa都包含Foundation,因此如果您已经导入了CocoaUIKit,则无需再次导入它。


格式字符串可以指定多个项目的格式。例如,如果您要将3小时,15分钟和7秒格式化为03:15:07,可以这样做:

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

输出:

03:15:07

0