不推荐使用Swift 4'substring(from :)':请使用字符串切片下标和'partial range from'运算符

Raf*_*aro 22 substring deprecated swift swift4

我刚刚转换了我的小应用程序,但我发现了这个错误:'substring(from :)'已被弃用:请使用字符串切片下标和'partial range from'运算符

我的代码是:

    let dateObj = dateFormatterFrom.date(from: dateStringa)


    if dateObj != nil {
        cell.detailTextLabel?.text = dateFormatterTo.string(from:(dateObj!))
    } else {
        let index = thisRecord.pubDate.index(thisRecord.pubDate.startIndex, offsetBy: 5)
        cell.detailTextLabel?.text = thisRecord.pubDate.substring(from: index)
    }
Run Code Online (Sandbox Code Playgroud)

Tej*_*ina 35

请按照以下示例修复此警告

let testStr = “Test Teja”

let finalStr = testStr.substring(to: index) // Swift 3
let finalStr = String(testStr[..<index]) // Swift 4

let finalStr = testStr.substring(from: index) // Swift 3
let finalStr = String(testStr[index...]) // Swift 4 

//Swift 3
let finalStr = testStr.substring(from: index(startIndex, offsetBy: 3)) 

//Swift 4
let reqIndex = testStr.index(testStr.startIndex, offsetBy: 3)
let finalStr = String(testStr[..<reqIndex])
Run Code Online (Sandbox Code Playgroud)

  • 我得到“下标”不可用:不能用整数范围下标字符串,请参阅文档comm (2认同)

Vin*_*App 14

代替substring使用suffix.使用如下:

cell.detailTextLabel?.text = String(thisRecord.pubDate.suffix(from: index))
Run Code Online (Sandbox Code Playgroud)


Leo*_*bus 10

这意味着你应该使用新的部分范围运算符作为upperBound:

let str =  "Hello World !!!"
if let index = str.range(of: "Hello ")?.upperBound {
   let string = String(str[index...])  // "World !!!"
}
Run Code Online (Sandbox Code Playgroud)

在你的情况下

cell.detailTextLabel?.text = String(thisRecord.pubDate[index...]))
Run Code Online (Sandbox Code Playgroud)


Ank*_*kur 5

在 Swift 5 中,它是:

extension String {

    func index(from: Int) -> Index {
        return self.index(startIndex, offsetBy: from)
    }

    func substring(from: Int) -> String {
        let fromIndex = index(from: from)
        return String(self[fromIndex...])
    }

    func substring(to: Int) -> String {
        let toIndex = index(from: to)
        return String(self[..<toIndex])
    }

    func substring(with r: Range<Int>) -> String {
        let startIndex = index(from: r.lowerBound)
        let endIndex = index(from: r.upperBound)
        return String(self[startIndex..<endIndex])
    }
}
Run Code Online (Sandbox Code Playgroud)

  • &lt;rant&gt;这太烦人了,他们选择了一种简单而优雅的语法,你必须编写扩展才能获得可行的东西。使用正则表达式时超级烦人。&lt;/rant&gt;。感谢您发布此内容:) (3认同)