web-dev-qa-db-fra.com

obsolète encodedOffset

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?

8
user4992124

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)
}
5
Martin R
yourString1.yourIndex.utf16Offset(in: yourString2)
1
Hiren Panchal