Comment puis-je obtenir le premier ou le nième caractère d'une piqûre? J'ai essayé de support([]
) accesseur avec pas de chance.
var string = "Hello, world!"
var firstChar = string[0] // Throws error
Comment puis-je obtenir le premier ou le nième caractère d'une piqûre? J'ai essayé de support([]
) accesseur avec pas de chance.
var string = "Hello, world!"
var firstChar = string[0] // Throws error
La façon la plus simple de le faire dans extension String {}
...
subscript (i: Int) -> String {
return String(Array(self)[i])
}
... permet de...
var char = "abcde"[2] // char equals "c"
Et pour les points de bonus, nous allons faire une Gamme indice trop...
subscript (r: Range<Int>) -> String {
var start = advance(startIndex, r.startIndex)
var end = advance(startIndex, r.endIndex)
return substringWithRange(Range(start: start, end: end))
}
... permet de...
var string = "abcde"[0...2] // string equals "abc"
var string2 = "fghij"[2..<4] // string2 equals "hi"
Profitez-en!
Edit: Fait un tas de modifications à faire, tout le travail de droit (même avec Unicode jazz). Devraient ai vérifié mon travail la première fois. Désolé!
Au lieu de fonctionner avec le type Int pour accéder aux caractères d'une chaîne, vous devez envisager d'utiliser le standard de type Chaîne de caractères.Index
Vous pouvez obtenir l'index de la chaîne elle-même à l'aide de fonctions startIndex et endIndex, et ensuite avec la fonction standard de l'avance de déplacer l'index à la position que vous avez besoin.
let str = "Hello, world!"
let index = advance(str.startIndex, 4)
str[index] // returns Character 'o'
let endIndex = advance(str.endIndex, -2)
str[Range(start: index, end: endIndex)] // returns String "o, worl"
str.substringFromIndex(index) // returns String "o, world!"
str.substringToIndex(index) // returns String "Hell"
Et bien sûr, vous n'avez pas besoin d'écrire des extensions pour la Chaîne et la convertir en Tableau
Pas d'indexation à l'aide de nombres entiers, en utilisant uniquement String.Index
. Surtout avec une complexité linéaire. Vous pouvez également créer des plages d' String.Index
et obtenir à l'aide des sous-chaînes.
var firstChar = string[string.startIndex]
var lastChar = string[string.endIndex]
var charAtIndex = string[advance(string.startIndex, 10)]
var range = string.startIndex..advance(string.startIndex, 10)
var subtring = string[range]
Notez que vous ne pouvez jamais utiliser un index (ou la plage) créé à partir d'une chaîne à une autre chaîne
var index10 = advance(string.startIndex, 10)
//will compile
//sometimes it will work but sometimes it will crash or result in undefined behaviour
var charFromAnotherString = anotherString[index10]
La swift classe string ne fournit pas la possibilité d'obtenir un personnage à un index spécifique en raison de sa prise en charge native pour l'UTF caractères. La longueur variable de UTF caractère dans la mémoire permet de sauter directement à un caractère impossible. Cela signifie que vous devez manuellement en boucle sur la chaîne à chaque fois.
Vous pouvez étendre la Chaîne de fournir une méthode qui passe en boucle sur les caractères jusqu'à ce que votre indice désiré
extension String {
func characterAtIndex(index: Int) -> Character? {
var cur = 0
for char in self {
if cur == index {
return char
}
cur++
}
return nil
}
}
myString.characterAtIndex(0)!
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.