Swift 4 'substring(from:)' is deprecated: Please use String slicing subscript with a 'partial range from' operator

前端 未结 7 2051
情话喂你
情话喂你 2020-12-30 23:59

i\'ve just converted my little app but i\'ve found this error: \'substring(from:)\' is deprecated: Please use String slicing subscript with a \'partial range from\' operator

相关标签:
7条回答
  • 2020-12-31 00:21

    If you wish to get substring with specific offset without upper bound do the following:

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

    This way you create a new String object from your existing String thisRecord.pubDate taking anything from specified index to the end index of original String.

    0 讨论(0)
  • 2020-12-31 00:22

    It means you should use the new partial range operator as your upperBound:

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

    In your case

    cell.detailTextLabel?.text = String(thisRecord.pubDate[index...]))
    
    0 讨论(0)
  • 2020-12-31 00:25

    In place of substring use suffix. Use like below :

    cell.detailTextLabel?.text = String(thisRecord.pubDate.suffix(from: index))
    
    0 讨论(0)
  • 2020-12-31 00:35
    str[..<index]
    str[index...]
    

    The code above is "partial range from" Look at this How can I use String slicing subscripts in Swift 4?

    0 讨论(0)
  • 2020-12-31 00:39

    Follow the below example to fix this warning: Supporting examples for Swift 3, 4 and 5.

    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 and 5
    let reqIndex = testStr.index(testStr.startIndex, offsetBy: 3)
    let finalStr = String(testStr[..<reqIndex])
    
    //**Swift 5.1.3 - usage of index**
    
    let myStr = "Test Teja == iOS"
    
    let startBound1 = String.Index(utf16Offset: 13, in: myStr)
    let finalStr1 = String(myStr[startBound1...])// "iOS"
    
    let startBound2 = String.Index(utf16Offset: 5, in: myStr)
    let finalStr2 = String(myStr[startBound2..<myStr.endIndex]) //"Teja == iOS"
    
    0 讨论(0)
  • 2020-12-31 00:39

    Most of my strings have A-Za-z and 0-9 content. No need for difficult Index handling. This extension of String is based on the familiar LEFT / MID and RIGHT functions.

    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)
        }
    }
    
    0 讨论(0)
提交回复
热议问题