Answers:
假设您希望字段长度为2,且前导零为零,则可以这样做:
import Foundation
for myInt in 1 ... 3 {
print(String(format: "%02d", myInt))
}
输出:
01 02 03
这需要import Foundation
因此从技术上讲不是斯威夫特语言的一部分,而是由提供的功能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
println("0\(myInt)")
您的建议。那将使用Swift本机String类,而不是通过NSString格式化。
String(format: "%03d", myInt)
会给你的"000", "001", ... , "099", "100"
。
-3, -9
出现类似value的值,就会出现这些问题,它仍然返回相同的值而没有前导零。
使用Swift 5,您可以选择以下三个示例之一来解决您的问题。
String
的init(format:_:)
初始值设定项Foundation
提供Swift String
的init(format:_:)
初始化程序。init(format:_:)
具有以下声明:
init(format: String, _ arguments: CVarArg...)
返回一个
String
对象,该对象使用给定的格式字符串作为模板进行初始化,其余参数值将替换为该对象。
以下Playground代码显示了如何使用来创建一个至少具有两个整数的String
格式化格式:Int
init(format:_:)
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"
String
的init(format:arguments:)
初始值设定项Foundation
提供Swift String
的init(format:arguments:)
初始化程序。init(format:arguments:)
具有以下声明:
init(format: String, arguments: [CVarArg])
返回一个
String
对象,该对象使用给定的格式字符串作为模板进行初始化,其余的参数值根据用户的默认语言环境替换为模板。
以下Playground代码显示了如何使用来创建一个至少具有两个整数的String
格式化格式:Int
init(format:arguments:)
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"
NumberFormatter
基金会提供NumberFormatter
。苹果对此表示:
实例的
NSNumberFormatter
格式包含NSNumber
对象的单元格的文本表示形式,并将数值的文本表示形式转换为NSNumber
对象。该表示形式包含整数,浮点数和双精度数;浮点数和双精度数可以格式化为指定的小数位。
以下Playground代码显示了如何创建从至少NumberFormatter
返回两个整数的a:String?
Int
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.0 +
extension String {
func padLeft (totalWidth: Int, with: String) -> String {
let toPad = totalWidth - self.characters.count
if toPad < 1 { return self }
return "".stringByPaddingToLength(toPad, withString: with, startingAtIndex: 0) + self
}
}
雨燕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
}
}
使用此方法:
for myInt in 1...3 {
print("\(myInt)".padLeft(totalWidth: 2, with: "0"))
}
迅捷3.0+
左填充String
扩展名类似于padding(toLength:withPad:startingAt:)
inFoundation
extension String {
func leftPadding(toLength: Int, withPad: String = " ") -> String {
guard toLength > self.characters.count else { return self }
let padding = String(repeating: withPad, count: toLength - self.characters.count)
return padding + self
}
}
用法:
let s = String(123)
s.leftPadding(toLength: 8, withPad: "0") // "00000123"
withPad
传递的参数超过单个字符,这可能会或可能不会按用户期望的那样工作。
@imanuo的答案已经很不错了,但是如果您使用的是数量众多的应用程序,则可以考虑使用以下扩展名:
extension String {
init(withInt int: Int, leadingZeros: Int = 2) {
self.init(format: "%0\(leadingZeros)d", int)
}
func leadingZeros(_ zeros: Int) -> String {
if let int = Int(self) {
return String(withInt: int, leadingZeros: zeros)
}
print("Warning: \(self) is not an Int")
return ""
}
}
这样,您可以在任何地方致电:
String(withInt: 3)
// prints 03
String(withInt: 23, leadingZeros: 4)
// prints 0023
"42".leadingZeros(2)
// prints 42
"54".leadingZeros(3)
// prints 054
Xcode 9.0.1,Swift 4.0
数据
import Foundation
let array = [0,1,2,3,4,5,6,7,8]
解决方案1
extension Int {
func getString(prefix: Int) -> String {
return "\(prefix)\(self)"
}
func getString(prefix: String) -> String {
return "\(prefix)\(self)"
}
}
for item in array {
print(item.getString(prefix: 0))
}
for item in array {
print(item.getString(prefix: "0x"))
}
解决方案2
for item in array {
print(String(repeatElement("0", count: 2)) + "\(item)")
}
解决方案3
extension String {
func repeate(count: Int, string: String? = nil) -> String {
if count > 1 {
let repeatedString = string ?? self
return repeatedString + repeate(count: count-1, string: repeatedString)
}
return self
}
}
for item in array {
print("0".repeate(count: 3) + "\(item)")
}