Jee*_*hut 272 string int type-conversion swift
我想将Int
Swift转换为String
带有前导零的.例如,考虑以下代码:
for myInt in 1 ... 3 {
print("\(myInt)")
}
Run Code Online (Sandbox Code Playgroud)
目前的结果是:
1
2
3
Run Code Online (Sandbox Code Playgroud)
但我希望它是:
01
02
03
Run Code Online (Sandbox Code Playgroud)
在Swift标准库中有没有一种干净的方法呢?
vac*_*ama 596
假设你想要一个带有前导零的字段长度为2,你可以这样做:
import Foundation
for myInt in 1 ... 3 {
print(String(format: "%02d", myInt))
}
Run Code Online (Sandbox Code Playgroud)
输出:
Run Code Online (Sandbox Code Playgroud)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))
Run Code Online (Sandbox Code Playgroud)
输出:
Run Code Online (Sandbox Code Playgroud)03:15:07
Ima*_*tit 132
使用Swift 4.2,您可以选择以下三个示例中的一个来解决您的问题.
String
的init(format:_:)
初始化程序Foundation
为Swift String
提供init(format:_:)
初始化程序.init(format:_:)
有以下声明:
init(format: String, _ arguments: CVarArg...)
Run Code Online (Sandbox Code Playgroud)
返回
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"
Run Code Online (Sandbox Code Playgroud)
String
的init(format:arguments:)
初始化程序Foundation
为Swift String
提供init(format:arguments:)
初始化程序.init(format:arguments:)
有以下声明:
init(format: String, arguments: [CVarArg])
Run Code Online (Sandbox Code Playgroud)
返回
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"
Run Code Online (Sandbox Code Playgroud)
NumberFormatter
基金会提供NumberFormatter
.Apple说明了这一点:
NSNumberFormatter
格式化包含NSNumber
对象的单元格的文本表示形式并将数值的文本表示转换为NSNumber
对象的实例.表示包括整数,浮点数和双精度数; 浮点数和双精度数可以格式化为指定的小数位.
以下Playground代码显示如何创建从至少两个整数位NumberFormatter
返回的值: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")
Run Code Online (Sandbox Code Playgroud)
Kir*_*air 11
对于左边填充,添加如下字符串扩展名:
Swift 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
}
}
Run Code Online (Sandbox Code Playgroud)
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
}
}
Run Code Online (Sandbox Code Playgroud)
使用此方法:
for myInt in 1...3 {
print("\(myInt)".padLeft(totalWidth: 2, with: "0"))
}
Run Code Online (Sandbox Code Playgroud)
小智 7
Swift 3.0+
左填充String
扩展类似于padding(toLength:withPad:startingAt:)
在Foundation
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
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
let s = String(123)
s.leftPadding(toLength: 8, withPad: "0") // "00000123"
Run Code Online (Sandbox Code Playgroud)
使用 Swift 5\xe2\x80\x99s 奇特的新可扩展插值:
\nextension DefaultStringInterpolation {\n mutating func appendInterpolation(pad value: Int, toWidth width: Int, using paddingCharacter: Character = "0") {\n appendInterpolation(String(format: "%\\(paddingCharacter)\\(width)d", value))\n }\n}\n\nlet pieCount = 3\nprint("I ate \\(pad: pieCount, toWidth: 3, using: "0") pies") // => `I ate 003 pies`\nprint("I ate \\(pad: 1205, toWidth: 3, using: "0") pies") // => `I ate 1205 pies`\n
Run Code Online (Sandbox Code Playgroud)\n
@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 ""
}
}
Run Code Online (Sandbox Code Playgroud)
通过这种方式,您可以在任何地方调用:
String(withInt: 3)
// prints 03
String(withInt: 23, leadingZeros: 4)
// prints 0023
"42".leadingZeros(2)
// prints 42
"54".leadingZeros(3)
// prints 054
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
96018 次 |
最近记录: |