私のアプリケーションでは、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をこれらの提案でどのように置き換えることができるかは、私には明確ではありません。何か案は?
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)
}
yourString1.yourIndex.utf16Offset(in: yourString2)