Обратный код геокодирования

Этот ответ от Martin R кажется правильным, потому что он учитывает Unicode.

Однако во время сообщения (Swift 1) его код не компилируется в Swift 2.0 (Xcode 7), поскольку они удалили функцию advance(). Обновленная версия приведена ниже:

Swift 2

extension String {
    func rangeFromNSRange(nsRange : NSRange) -> Range? {
        let from16 = utf16.startIndex.advancedBy(nsRange.location, limit: utf16.endIndex)
        let to16 = from16.advancedBy(nsRange.length, limit: utf16.endIndex)
        if let from = String.Index(from16, within: self),
            let to = String.Index(to16, within: self) {
                return from ..< to
        }
        return nil
    }
}

Swift 3

extension String {
    func rangeFromNSRange(nsRange : NSRange) -> Range? {
        if let from16 = utf16.index(utf16.startIndex, offsetBy: nsRange.location, limitedBy: utf16.endIndex),
            let to16 = utf16.index(from16, offsetBy: nsRange.length, limitedBy: utf16.endIndex),
            let from = String.Index(from16, within: self),
            let to = String.Index(to16, within: self) {
                return from ..< to
        }
        return nil
    }
}

Swift 4

extension String {
    func rangeFromNSRange(nsRange : NSRange) -> Range? {
        return Range(nsRange, in: self)
    }
}

15
задан Trott 25 June 2011 в 17:21
поделиться