回答:
先行ゼロのあるフィールド長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クラスを使用します。
String(format: "%03d", myInt)
あなたに与えるでしょう"000", "001", ... , "099", "100"
。
-3, -9
発生した場合のこれらの問題は、先行ゼロなしで同じ値を返します。
Swift 5では、問題を解決するために、以下に示す3つの例のいずれかを選択できます。
String
のinit(format:_:)
初期化子を使用するFoundation
Swift String
にinit(format:_:)
イニシャライザを提供します。init(format:_:)
次の宣言があります:
init(format: String, _ arguments: CVarArg...)
String
残りの引数値が代入されるテンプレートとして、指定されたフォーマット文字列を使用して初期化されたオブジェクトを返します。
次のPlaygroundコードは、を使用String
しInt
て、少なくとも2桁の整数でフォーマットされたを作成する方法を示しています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
て、少なくとも2桁の整数でフォーマットされたを作成する方法を示しています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は、指定された小数点位置にフォーマットできます。
次のPlaygroundコードは、少なくとも2桁の整数でから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")
左パディングの場合は、次のような文字列拡張を追加します。
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
}
}
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
}
}
この方法を使用する:
for myInt in 1...3 {
print("\(myInt)".padLeft(totalWidth: 2, with: "0"))
}
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
}
}
使用法:
let s = String(123)
s.leftPadding(toLength: 8, withPad: "0") // "00000123"
withPad
渡された引数が1文字以上の場合にユーザーが期待するとおりに機能する場合と機能しない場合があります。
@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)")
}