【问题标题】:Swift 4: 'init' is deprecated. CountableRange is now Range [duplicate]Swift 4:不推荐使用“init”。 CountableRange 现在是 Range [重复]
【发布时间】:2018-10-05 05:15:44
【问题描述】:

我有这个String 类别:

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])
    }
}

Xcode 在这一行给我一个警告: return self[Range(i ..< i + 1)]

'init' 已弃用:CountableRange 现在是 Range。无需再转换。

很遗憾,尽管我对 Swift 非常熟悉,但我不知道如何解决这个问题。问题是:如何摆脱这个警告。

谢谢!

【问题讨论】:

  • @MartinR - 这似乎不是重复的。这是一个不同的错误和不同的代码更改。我错过了什么吗?
  • 对我来说看起来像同样的问题(CountableRange 不再是一个单独的类型,转换方法已被​​删除),同样的解决方案:将Range(i ..&lt; i + 1) 替换为i..&lt;i+1
  • @MartinR OK,再看一遍,我看到代码变化是一样的。但是考虑到错误消息是如此不同,即使解决方案与另一个解决方案相同,这仍然是一个好问题。
  • @rmaddy:如果您认为合适,请随时重新打开线程。 (参考其他问答可能仍然有用,因为它解释了问题的根源。)

标签: swift


【解决方案1】:

您不需要Range.init。换句话说,改变:

return self[Range(i ..< i + 1)]

到:

return self[i ..< i + 1]

【讨论】:

猜你喜欢
  • 2018-03-15
  • 1970-01-01
  • 2012-11-14
  • 1970-01-01
  • 2017-07-12
  • 2015-07-05
  • 1970-01-01
  • 1970-01-01
  • 2019-01-22
相关资源
最近更新 更多