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