在Swift中,整数的前导零
在Swift中,整数的前导零
我想将Swift中的Int
转换为具有前导零的String
。例如考虑以下代码:
for myInt in 1 ... 3 { print("\(myInt)") }
目前它的结果是:
1 2 3
但我想要它是:
01 02 03
在Swift标准库中有一种干净的方法实现这个吗?
在 Swift 5 中,您可以选择下面的三个示例之一来解决问题。
#1. 使用 String
的 init(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. 使用 String
的 init(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
,它返回至少有两位整数数字的Int
的String?
:
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")
假设您想要一个长度为2的字段,在前面补零,您可以这样做:
import Foundation for myInt in 1 ... 3 { print(String(format: "%02d", myInt)) }
输出:
01 02 03
这需要import Foundation
,因此从技术上讲,它不是Swift语言的一部分,而是Foundation
框架提供的一个功能。请注意,import UIKit
和import Cocoa
都包含Foundation
,因此如果您已经导入了Cocoa
或UIKit
,则无需再次导入它。
格式字符串可以指定多个项目的格式。例如,如果您要将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