How can I use String substring in Swift 4? 'substring(to:)' is deprecated: Please use String slicing subscript with a 'partial range from' operator How can I use String substring in Swift 4? 'substring(to:)' is deprecated: Please use String slicing subscript with a 'partial range from' operator swift swift

How can I use String substring in Swift 4? 'substring(to:)' is deprecated: Please use String slicing subscript with a 'partial range from' operator


You should leave one side empty, hence the name "partial range".

let newStr = str[..<index]

The same stands for partial range from operators, just leave the other side empty:

let newStr = str[index...]

Keep in mind that these range operators return a Substring. If you want to convert it to a string, use String's initialization function:

let newStr = String(str[..<index])

You can read more about the new substrings here.


Convert Substring (Swift 3) to String Slicing (Swift 4)

Examples In Swift 3, 4:

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

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

let range = firstIndex..<secondIndex // If you have a rangelet newStr = = str.substring(with: range) // Swift 3let newStr = String(str[range])  // Swift 4


Swift 5, 4

Usage

let text = "Hello world"text[0] // Htext[...3] // "Hell"text[6..<text.count] // worldtext[NSRange(location: 6, length: 3)] // wor

Code

import Foundationpublic extension String {  subscript(value: Int) -> Character {    self[index(at: value)]  }}public extension String {  subscript(value: NSRange) -> Substring {    self[value.lowerBound..<value.upperBound]  }}public extension String {  subscript(value: CountableClosedRange<Int>) -> Substring {    self[index(at: value.lowerBound)...index(at: value.upperBound)]  }  subscript(value: CountableRange<Int>) -> Substring {    self[index(at: value.lowerBound)..<index(at: value.upperBound)]  }  subscript(value: PartialRangeUpTo<Int>) -> Substring {    self[..<index(at: value.upperBound)]  }  subscript(value: PartialRangeThrough<Int>) -> Substring {    self[...index(at: value.upperBound)]  }  subscript(value: PartialRangeFrom<Int>) -> Substring {    self[index(at: value.lowerBound)...]  }}private extension String {  func index(at offset: Int) -> String.Index {    index(startIndex, offsetBy: offset)  }}