web-dev-qa-db-ja.com

encodingOffsetの廃止

私のアプリケーションでは、URLのホストの範囲をフェッチするためのコードがいくつかあります。次のようになります。

_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は'encodedOffset' is deprecated: encodedOffset has been deprecated as the most common usage is incorrect. Use utf16Offset(in:) to achieve the same behavior.を警告しています。ただし、それらのencodingOffsetをこれらの提案でどのように置き換えることができるかは、私には明確ではありません。何か案は?

8
user4992124

Range<String.Index>からNSRangeを作成する簡単で正しい方法は、初期化子を使用することです。

public init<R, S>(_ region: R, in target: S) where R : RangeExpression, S : StringProtocol, R.Bound == String.Index

あなたの場合:

if let range = text.range(of: Host) {
    return NSRange(range, in: text)
}
5
Martin R
yourString1.yourIndex.utf16Offset(in: yourString2)
1
Hiren Panchal