Dans mon application, j'ai du code pour récupérer la plage de l'hôte dans un URL
. Cela ressemble à ceci:
private func rangeOfHost(text: String) -> NSRange? {
let url = URL(string: text)
if let Host: String = url?.Host {
if let range = text.range(of: Host) {
return NSRange(
location: range.lowerBound.encodedOffset,
length: range.upperBound.encodedOffset - range.lowerBound.encodedOffset
)
}
}
return nil
}
Xcode m'a averti que 'encodedOffset' is deprecated: encodedOffset has been deprecated as the most common usage is incorrect. Use utf16Offset(in:) to achieve the same behavior.
. Cependant, je ne sais pas comment remplacer ces encodedOffsets par ces suggestions. Des idées?
Un moyen simple et correct de créer un NSRange
à partir d'un Range<String.Index>
est d'utiliser son initialiseur:
public init<R, S>(_ region: R, in target: S) where R : RangeExpression, S : StringProtocol, R.Bound == String.Index
Dans ton cas:
if let range = text.range(of: Host) {
return NSRange(range, in: text)
}
yourString1.yourIndex.utf16Offset(in: yourString2)