J'essaie de tester si une string Swift commence ou se termine avec une certaine valeur. Ces methods n'existent pas:
var str = "Hello, playground" str.startsWith("Hello") // error str.endsWith("ground") // error
J'aimerais aussi get les strings de préfixe et de suffixe. Je pourrais find une sous-string, comme on le dit ici et ici , mais les plages sont si pénibles dans Swift.
Y a-t-il un moyen plus facile de le faire?
(J'ai trouvé la réponse quand je lisais la documentation , et comme une réponse SO n'a pas été trouvée pour mes termes de search, j'ajoute mon Q & R ici.)
Mise à jour pour Swift 4
Vous pouvez utiliser les hasPrefix(_:)
et hasSuffix(_:)
pour tester l'égalité avec une autre string.
let str = "Hello, playground" if str.hasPrefix("Hello") { // true print("Prefix exists") } if str.hasSuffix("ground") { // true print("Suffix exists") }
Pour get la sous-string de préfixe ou de suffixe, vous pouvez utiliser l'une des methods suivantes. Je recommand la première méthode pour sa simplicité. Toutes les methods utilisent str
comme
let str = "Hello, playground"
Méthode 1: prefix(Int)
(recommandé) prefix(Int)
et suffix(Int)
let prefix = Ssortingng(str.prefix(5)) // Hello let suffix = Ssortingng(str.suffix(6)) // ground
C'est la meilleure méthode à mon avis. Contrairement aux methods 2 et 3 ci-dessous, cette méthode ne va pas planter si les index sortent des limites. Cela returnnera simplement tous les caractères de la string.
let prefix = Ssortingng(str.prefix(225)) // Hello, playground let suffix = Ssortingng(str.suffix(623)) // Hello, playground
Bien sûr, parfois les plantages sont bons car ils vous permettent de savoir qu'il y a un problème avec votre code. Donc, considérez la deuxième méthode ci-dessous également. Il va lancer une erreur si l'index sort des limites.
Méthode 2: prefix(upto:)
et suffix(from:)
Les index Swift Ssortingng sont difficiles car ils doivent prendre en count les caractères spéciaux (comme les emoji). Cependant, une fois que vous obtenez l'index, il est facile d'get le préfixe ou le suffixe. (Voir mon autre réponse sur Ssortingng.Index
.)
let prefixIndex = str.index(str.startIndex, offsetBy: 5) let prefix = Ssortingng(str.prefix(upTo: prefixIndex)) // Hello let suffixIndex = str.index(str.endIndex, offsetBy: -6) let suffix = Ssortingng(str.suffix(from: suffixIndex)) // ground
Si vous voulez éviter de sortir des limites, vous pouvez créer un index en utilisant limitedBy
(encore une fois, voir cette réponse ).
Méthode 3: indices
Puisque Ssortingng est une collection, vous pouvez utiliser des indices pour get le préfixe et le suffixe.
let prefixIndex = str.index(str.startIndex, offsetBy: 5) let prefix = Ssortingng(str[..<prefixIndex]) // Hello let suffixIndex = str.index(str.endIndex, offsetBy: -6) let suffix = Ssortingng(str[suffixIndex...]) // ground
Préfixe et égalité des suffixes
Pour vérifier si une string a un préfixe ou un suffixe de string particulier, appelez les methods hasPrefix ( 🙂 et hasSuffix ( 🙂 de la string, qui prennent toutes deux un seul argument de type Ssortingng et returnnent une valeur booleanne.
Apple Doc