Swift 4:';初始';不推荐使用。CountableRange现在是范围

Swift 4:';初始';不推荐使用。CountableRange现在是范围,swift,Swift,我有这个字符串类别: extension String { subscript (i: Int) -> String { return self[Range(i ..< i + 1)] } subscript (r: Range<Int>) -> String { let range = Range(uncheckedBounds: (lower: max(0, min(count, r.lowerBoun

我有这个
字符串
类别:

extension String {

    subscript (i: Int) -> String {
        return self[Range(i ..< i + 1)]
    }

    subscript (r: Range<Int>) -> String {
        let range = Range(uncheckedBounds: (lower: max(0, min(count, r.lowerBound)),
                                            upper: min(count, max(0, r.upperBound))))
        let start = index(startIndex, offsetBy: range.lowerBound)
        let end = index(start, offsetBy: range.upperBound - range.lowerBound)
        return String(self[start ..< end])
    }
}
扩展字符串{
下标(i:Int)->字符串{
返回自[范围(i..字符串{
设范围=范围(未选中边界:(下限:最大值(0,最小值(计数,r.lowerBound)),
上限:最小值(计数,最大值(0,r.上限)))
让开始=索引(开始索引,偏移量:range.lowerBound)
让结束=索引(开始,偏移:range.upperBound-range.lowerBound)
返回字符串(self[start..
Xcode在这行给了我一个警告:
返回自[范围(i..

“init”已弃用:CountableRange现在是范围。不需要再转换了

遗憾的是,尽管我对Swift很有经验,但我不知道如何解决这个问题。问题是:如何摆脱这一警告


谢谢大家!

您不需要
范围.init
。换言之,改变:

return self[Range(i ..< i + 1)]
返回自[范围(i..
致:

返回自我[i..
好的,谢谢。在看到您的答案之前,我正在阅读这个(),并尝试了上面的代码,它成功了。将在10分钟内将此标记为答案。@MartinR-这似乎不是重复的。这是一个不同的错误和不同的代码更改。我遗漏了什么吗?对我来说,这看起来像是同一个问题(CountableRange不再是一个单独的类型,转换方法已被删除),同样的解决方案是:用
I..
替换
I..@MartinR好的,再看一眼,我发现代码的更改是一样的。但鉴于错误消息如此不同,即使解决方案最终与另一个相同,这仍然是一个好问题。@rmaddy:如果您认为合适,请随时重新打开线程。(参考其他问答可能仍然有用,因为它解释了问题的来源。)
return self[i ..< i + 1]