Chaîne, sous-chaîne, la Plage, le NSRange dans Swift 4
Je suis en utilisant le code suivant pour obtenir un String
sous-chaîne à partir d'un NSRange
:
func substring(with nsrange: NSRange) -> String? {
guard let range = Range.init(nsrange)
else { return nil }
let start = UTF16Index(range.lowerBound)
let end = UTF16Index(range.upperBound)
return String(utf16[start..<end])
}
(via: https://mjtsai.com/blog/2016/12/19/nsregularexpression-and-swift/)
Quand je compile avec Swift 4 (Xcode 9b4), j'obtiens les erreurs suivantes pour les deux lignes qui déclarent start
et end
:
'init' is unavailable
'init' was obsoleted in Swift 4.0
Je suis confondu, car je ne suis pas à l'aide d'un init.
Comment puis-je résoudre ce problème?
OriginalL'auteur Koen | 2017-08-01
Vous devez vous connecter pour publier un commentaire.
Utilisation de la Gamme (_,:) pour convertir un NSRange à une Plage de Swift 4.
func substring(with nsrange: NSRange) -> String? { guard let range = Range(nsrange, in: self) else { return nil } return String(self[range]) }
Si vous faites de la fonction retourne une sous-Chaîne au lieu d'une Chaîne, vous n'aurez pas à convertir le résultat.
Ah, je ne savais pas que la sous-Chaîne est un type, je pensais que c'était une faute de frappe.
La sous-chaîne est un type de tranche. Ce que cela signifie, c'est qu'il contient une référence à la chaîne d'origine, ainsi que la plage de la sous-chaîne représente. L'avantage d'une tranche, c'est que vous n'avez pas à faire une copie des données de la manière que vous le feriez si vous étiez de retour d'une nouvelle Chaîne, de sorte que la performance est meilleure.
OriginalL'auteur Charles Srstka
Avec Swift 4, nous pouvons obtenir des sous-chaînes de cette façon.
Sous-chaîne à partir de l'index
Sous-chaîne à l'indice de
index
êtreoffset
OriginalL'auteur Nguyen Van Dung