답변:
선행 0이있는 필드 길이 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
println("0\(myInt)")
당신의 제안을 선택했을 것 입니다. NSString 형식화 대신 Swift 기본 문자열 클래스를 사용합니다.
String(format: "%03d", myInt)
당신에게 줄 것이다 "000", "001", ... , "099", "100"
.
-3, -9
발생하면 앞에 오는 0없이 동일한 값을 반환합니다.
Swift 5를 사용하면 문제를 해결하기 위해 아래에 표시된 세 가지 예 중 하나를 선택할 수 있습니다 .
String
의 init(format:_:)
이니셜 라이저Foundation
Swift String
에 init(format:_:)
이니셜 라이저를 제공합니다 . init(format:_:)
다음과 같은 선언이 있습니다.
init(format: String, _ arguments: CVarArg...)
String
주어진 형식 문자열을 나머지 인수 값이 대체되는 템플릿으로 사용하여 초기화 된 객체를 반환합니다 .
다음 놀이터 코드는 다음 을 사용하여 2 자리 이상의 정수로 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
주어진 형식 문자열을 템플릿으로 사용하여 나머지 인수 값이 사용자의 기본 로캘에 따라 대체되어 초기화 된 객체를 반환합니다 .
다음 놀이터 코드는 다음 을 사용하여 2 자리 이상의 정수로 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
. 표현은 정수, 부동 수 및 복식을 포함합니다. float 및 double은 지정된 소수점 위치로 형식을 지정할 수 있습니다.
만드는 방법 다음 놀이터 코드 쇼 NumberFormatter
가 반환 String?
A로부터 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:)
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
}
}
용법:
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, 신속한 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)")
}