En supposant que vous vouliez une longueur de champ de 2 avec des zéros en tête, vous feriez ceci:
import Foundation
for myInt in 1 ... 3 {
print(String(format: "%02d", myInt))
}
production:
01
02
03
Cela nécessite import Foundation
donc techniquement que ce n'est pas une partie du langage Swift mais une capacité fournie par le Foundation
framework. Notez que les deux import UIKit
et import Cocoa
incluent Foundation
donc il n'est pas nécessaire de l'importer à nouveau si vous avez déjà importé Cocoa
ou UIKit
.
La chaîne de format peut spécifier le format de plusieurs éléments. Par exemple, si vous essayez de formater des 3
heures, des 15
minutes et des 7
secondes, 03:15:07
vous pouvez le faire comme ceci:
let hours = 3
let minutes = 15
let seconds = 7
print(String(format: "%02d:%02d:%02d", hours, minutes, seconds))
production:
03:15:07
println("0\(myInt)")
plutôt votre suggestion. Cela utiliserait la classe String native Swift au lieu de passer par le formatage NSString.String(format: "%03d", myInt)
vous donnera"000", "001", ... , "099", "100"
.-3, -9
se produit, il retourne toujours le même sans zéro de tête.Avec Swift 5, vous pouvez choisir l'un des trois exemples ci-dessous pour résoudre votre problème.
#1. Utilisation de
String
l'init(format:_:)
initialiseur deFoundation
fournit à SwiftString
uninit(format:_:)
initialiseur.init(format:_:)
a la déclaration suivante:Le code Playground suivant montre comment créer un
String
formaté à partirInt
d'au moins deux chiffres entiers à l'aide deinit(format:_:)
:# 2. Utilisation de
String
l'init(format:arguments:)
initialiseur deFoundation
fournit à SwiftString
uninit(format:arguments:)
initialiseur.init(format:arguments:)
a la déclaration suivante:Le code Playground suivant montre comment créer un
String
formaté à partirInt
d'au moins deux chiffres entiers à l'aide deinit(format:arguments:)
:# 3. En utilisant
NumberFormatter
Fondation fournit
NumberFormatter
. Apple déclare à ce sujet:Le code Playground suivant montre comment créer un
NumberFormatter
qui renvoieString?
unInt
avec au moins deux chiffres entiers:la source
Pour le remplissage gauche, ajoutez une extension de chaîne comme celle-ci:
Swift 2.0 +
Swift 3.0 +
En utilisant cette méthode:
la source
Swift 3.0+
Padding gauche
String
extension similaire àpadding(toLength:withPad:startingAt:)
enFoundation
Usage:
la source
withPad
argument transmis est supérieur à un seul caractère.Swift 5
@imanuo réponses est déjà génial, mais si vous travaillez avec une application pleine de nombre, vous pouvez envisager une extension comme celle-ci:
De cette façon, vous pouvez appeler partout:
la source
dans Xcode 8.3.2, iOS 10.3 C'est bien maintenant
Sample1:
Sample2:
la source
Les autres réponses sont bonnes si vous ne traitez qu'avec des nombres utilisant la chaîne de format, mais cela est bon lorsque vous pouvez avoir des chaînes qui doivent être remplies (bien qu'il soit vrai qu'un peu différent de la question posée, semble similaire dans l'esprit). Faites également attention si la chaîne est plus longue que le pad.
Production
"-----a str"
la source
Détails
Xcode 9.0.1, swift 4.0
Solutions
Les données
Solution 1
Solution 2
Solution 3
la source
Contrairement aux autres réponses qui utilisent un formateur, vous pouvez également simplement ajouter un texte "0" devant chaque numéro à l'intérieur de la boucle, comme ceci:
Mais le formateur est souvent meilleur lorsque vous devez ajouter supposons une quantité désignée de 0 pour chaque nombre séparé. Si vous n'avez besoin que d'ajouter un 0, c'est vraiment votre choix.
la source