J'ai une chaîne comme celle-ci dans Swift:
var stringts:String = "3022513240"
Si je veux le changer en chaîne en quelque chose comme ceci: "(302)-251-3240"
, je veux ajouter les partheses à l'index 0, comment puis-je le faire?
En Objective-C, cela se fait de la manière suivante:
NSMutableString *stringts = "3022513240";
[stringts insertString:@"(" atIndex:0];
Comment le faire à Swift?
Si vous le déclarez comme NSMutableString
alors c'est possible et vous pouvez le faire de cette façon:
let str: NSMutableString = "3022513240)"
str.insert("(", at: 0)
print(str)
La sortie est:
(3022513240)
EDIT:
Si vous voulez ajouter au début:
var str = "3022513240)"
str.insert("(", at: str.startIndex)
Si vous voulez ajouter un caractère au dernier index:
str.insert("(", at: str.endIndex)
Et si vous voulez ajouter à un index spécifique:
str.insert("(", at: str.index(str.startIndex, offsetBy: 2))
Utilisez l’approche native Swift:
var welcome = "hello"
welcome.insert("!", at: welcome.endIndex) // prints hello!
welcome.insert("!", at: welcome.startIndex) // prints !hello
welcome.insert("!", at: welcome.index(before: welcome.endIndex)) // prints hell!o
welcome.insert("!", at: welcome.index(after: welcome.startIndex)) // prints h!Ello
welcome.insert("!", at: welcome.index(welcome.startIndex, offsetBy: 3)) // prints hel!lo
Si vous souhaitez en savoir plus sur les chaînes et les performances, regardez @ Thomas Deniau's answer en bas .
var phone = "+9945555555"
var indx = phone.index (phone.startIndex, offsetBy: 4)
phone.insert ("-", at: indx)
index = phone.index (phone.startIndex, offsetBy: 7)
phone.insert ("-", at: indx)
// + 994-55-55555
var myString = "hell"
let index = 4
let character = "o" as Character
myString.insert(
character, at:
myString.index(myString.startIndex, offsetBy: index)
)
print(myString) // "hello"
Attention: assurez-vous que index
est supérieur ou égal à la taille de la chaîne, sinon vous aurez un crash.
Pour afficher un numéro de téléphone à 10 chiffres au format USA Number (###) ### - ####Swift
func arrangeUSFormat(strPhone : String)-> String {
var strUpdated = strPhone
if strPhone.characters.count == 10 {
strUpdated.insert("(", at: strUpdated.startIndex)
strUpdated.insert(")", at: strUpdated.index(strUpdated.startIndex, offsetBy: 4))
strUpdated.insert(" ", at: strUpdated.index(strUpdated.startIndex, offsetBy: 5))
strUpdated.insert("-", at: strUpdated.index(strUpdated.startIndex, offsetBy: 9))
}
return strUpdated
}
Peut-être que cette extension pour Swift 4 aidera:
extension String {
mutating func insert(string:String,ind:Int) {
self.insert(contentsOf: string, at:self.index(self.startIndex, offsetBy: ind) )
}
}
Vous ne pouvez pas, car Swift index de chaîne (String.Index) est défini en termes de grappes de graphèmes Unicode, de sorte qu'il gère correctement tous les éléments Unicode. Vous ne pouvez donc pas créer de chaîne. Index directement à partir d'un index. Vous pouvez utiliser advance(theString.startIndex, 3)
pour examiner les clusters constituant la chaîne et calculer l'index correspondant au troisième cluster, mais attention, il s'agit d'un O(N) opération.
Dans votre cas, il est probablement plus facile d'utiliser une opération de remplacement de chaîne.
Départ cet article de blog pour plus de détails.
Vous ne pouvez pas utiliser ci-dessous Swift 2.0 car String
cessa d'être un collection
dans Swift 2.0. Mais dans = Swift 3/4 n'est plus nécessaire maintenant que String
est à nouveau un Collection
. Utilisez l'approche native de String
, Collection
.
var stringts:String = "3022513240"
let indexItem = stringts.index(stringts.endIndex, offsetBy: 0)
stringts.insert("0", at: indexItem)
print(stringts) // 30225132400
Version Swift 4.2 de la réponse de Dilmurat (avec corrections de code)
extension String {
mutating func insert(string:String,ind:Int) {
self.insert(contentsOf: string, at:self.index(self.startIndex, offsetBy: ind) )
}
}
Remarquez si vous voulez que l'index doit être par rapport à la chaîne dans laquelle vous insérez (self) et non à la chaîne que vous fournissez.