错误:将String扩展名转换为swift 3时,源文件中的编辑器占位符

Ale*_*eod 5 string range ios swift swift3

    subscript (r: Range<Int>) -> String {
        let start = startIndex.advancedBy(r.startIndex)
        let end = start.advancedBy(r.endIndex - r.startIndex)
        return self[Range(start: start, end: end)]
    }
Run Code Online (Sandbox Code Playgroud)

苦苦挣扎将我的String扩展中的上面的下标转换为swift 3.下面是我在Xcode上按下转换按钮后发生的事情.

        subscript (r: Range<Int>) -> String {
            let start = characters.index(startIndex, offsetBy: r.lowerBound)
            let end = <#T##String.CharacterView corresponding to `start`##String.CharacterView#>.index(start, offsetBy: r.upperBound - r.lowerBound)
            return self[(start ..< end)]
        }
Run Code Online (Sandbox Code Playgroud)

错误的屏幕截图

dir*_*nee 4

characters您需要做的就是在索引前面添加。编译器还会提示您添加String.CharacterView corresponding tostart ##String.CharacterView。该消息可能有点模糊,但它包含很大的价值!告诉你,这需要一个字符数组。characters然而,正如 @vadian 所建议的,您甚至可以从一开始就省略。

我也写了一个小测试,只是为了确定一下。

import Foundation

extension String {
    subscript (r: Range<Int>) -> String {
        let start = index(startIndex, offsetBy: r.lowerBound)
        let end = index(start, offsetBy: r.upperBound - r.lowerBound)
        return self[start..<end]
    }
}

let string = "Hello world"
let range = Range(uncheckedBounds: (lower: 0, upper: 2))
let s = string[range] // prints "He"
Run Code Online (Sandbox Code Playgroud)