Подстрока Swift 4 '(from:)' устарела: используйте индекс строковой развертки с оператором 'partial range from'

Я только что преобразовал мое маленькое приложение, но я нашел эту ошибку: '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)
    }

Ответ 1

Следуйте приведенному ниже примеру, чтобы исправить это предупреждение

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

Ответ 2

Вместо substring используйте suffix. Используйте, как показано ниже:

cell.detailTextLabel?.text = String(thisRecord.pubDate.suffix(from: index))

Ответ 3

Это означает, что вы должны использовать новый оператор частичного диапазона как ваш верхний бит:

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

В вашем случае

cell.detailTextLabel?.text = String(thisRecord.pubDate[index...]))

Ответ 4

Большинство моих строк имеют контент A-Za-z и 0-9. Нет необходимости в сложных Обработка индексов. Это расширение String основано на знакомых функциях LEFT/MID и RIGHT.

extension String {

    // LEFT
    // Returns the specified number of chars from the left of the string
    // let str = "Hello"
    // print(str.left(3))         // Hel
    func left(_ to: Int) -> String {
        return "\(self[..<self.index(startIndex, offsetBy: to)])"
    }

    // RIGHT
    // Returns the specified number of chars from the right of the string
    // let str = "Hello"
    // print(str.left(3))         // llo
    func right(_ from: Int) -> String {
        return "\(self[self.index(startIndex, offsetBy: self.length-from)...])"
    }

    // MID
    // Returns the specified number of chars from the startpoint of the string
    // let str = "Hello"
    // print(str.left(2,amount: 2))         // ll
    func mid(_ from: Int, amount: Int) -> String {
        let x = "\(self[self.index(startIndex, offsetBy: from)...])"
        return x.left(amount)
    }
}

Ответ 5

Если вы хотите получить подстроку с определенным смещением без верхней границы, сделайте следующее:

let index = thisRecord.pubDate.index(thisRecord.pubDate.startIndex, offsetBy: 5)
cell.detailTextLabel?.text = String(thisRecord.pubDate[index...]

Таким образом, вы создаете новый объект String из существующего String thisRecord.pubDate, беря что-либо от указанного индекса до конечного индекса оригинала String.