String 扩展在swift 3中如何工作?

String 扩展在swift 3中如何工作?,string,swift3,String,Swift3,我在swift 3中使用下面的扩展名,但我知道它不正确,因为我仍然会出错。扩展的要点是使用将从0返回字符串的语法string[0…2]获取字符串的范围。这就是我得到的错误 扩展字符串{ 下标(i:Int)->字符{ 返回self[self.characters.index(self.startIndex,offsetBy:i)] } 下标(i:Int)->字符串{ 返回字符串(self[i]作为字符) } 下标(r:范围)->字符串{ 让start=characters.index(startI

我在swift 3中使用下面的扩展名,但我知道它不正确,因为我仍然会出错。扩展的要点是使用将从0返回字符串的语法
string[0…2]
获取字符串的范围。这就是我得到的错误

扩展字符串{
下标(i:Int)->字符{
返回self[self.characters.index(self.startIndex,offsetBy:i)]
}
下标(i:Int)->字符串{
返回字符串(self[i]作为字符)
}
下标(r:范围)->字符串{
让start=characters.index(startIndex,offsetBy:r.lowerBound)
让end=characters.index(开始,偏移量:r.upperBound-r.lowerBound)
返回自我[(开始..<结束)]
}
}

在Swift 3中,闭合范围操作符
..
Int
s生成
CountableClosedRange
。因此,您需要为
下标
再定义一个重载

    subscript (r: CountableClosedRange<Int>) -> String {
        let start = characters.index(startIndex, offsetBy: r.lowerBound)
        let end = characters.index(start, offsetBy: r.upperBound - r.lowerBound)
        return self[(start ... end)]
    }
下标(r:CountableClosedRange)->字符串{
让start=characters.index(startIndex,offsetBy:r.lowerBound)
让end=characters.index(开始,偏移量:r.upperBound-r.lowerBound)
返回自我[(开始…结束)]
}

在Swift 3中,闭合范围操作符
..
Int
s生成
CountableClosedRange
。因此,您需要为
下标
再定义一个重载

    subscript (r: CountableClosedRange<Int>) -> String {
        let start = characters.index(startIndex, offsetBy: r.lowerBound)
        let end = characters.index(start, offsetBy: r.upperBound - r.lowerBound)
        return self[(start ... end)]
    }
下标(r:CountableClosedRange)->字符串{
让start=characters.index(startIndex,offsetBy:r.lowerBound)
让end=characters.index(开始,偏移量:r.upperBound-r.lowerBound)
返回自我[(开始…结束)]
}
在Swift 4中更新:

extension String{
    subscript (r: CountableClosedRange<Int>) -> String {
        let start = index(startIndex, offsetBy: r.lowerBound)
        let end = index(start, offsetBy: r.upperBound - r.lowerBound)
        return String(self[start...end])
    }
}
扩展字符串{
下标(r:CountableClosedRange)->字符串{
让开始=索引(开始索引,偏移:r.lowerBound)
让结束=索引(开始,偏移:r.上限-r.下限)
返回字符串(self[start…end])
}
}
在Swift 4中更新:

extension String{
    subscript (r: CountableClosedRange<Int>) -> String {
        let start = index(startIndex, offsetBy: r.lowerBound)
        let end = index(start, offsetBy: r.upperBound - r.lowerBound)
        return String(self[start...end])
    }
}
扩展字符串{
下标(r:CountableClosedRange)->字符串{
让开始=索引(开始索引,偏移:r.lowerBound)
让结束=索引(开始,偏移:r.上限-r.下限)
返回字符串(self[start…end])
}
}