mono0926
7/3/2017 - 11:33 AM

StringのNSRange変換のSwift 3用extension (4になったら定義消すだけで利用箇所はそのまま動くはず)

StringのNSRange変換のSwift 3用extension (4になったら定義消すだけで利用箇所はそのまま動くはず)

import Foundation

extension NSRange {
    /// Swift 3まで用(4になったら消した方が良い)
    /// `Range<String.Index>`は4では[RangeExpression](https://developer.apple.com/documentation/swift/rangeexpression)
    /// だが3ではないので適当に書き換え
    init(_ range: Range<String.Index>, in string: StringLiteralType) {
        let utf16 = string.utf16
        let from = range.lowerBound.samePosition(in: utf16)
        let to = range.upperBound.samePosition(in: utf16)
        self.init(location: utf16.distance(from: utf16.startIndex, to: from),
                  length: utf16.distance(from: from, to: to))
    }
}

let x = "( ´・‿・`)"
// UIKitなどのNSRangeを要求するAPIに渡せる(4ではこのイニシャライザーが標準で提供されている)
NSRange(x.range(of: "‿")!, in: x)