¿Cómo puedo usar la subcadena String en Swift 4? 'subcadena(a:)' está en desuso: utilice el subíndice de división de cadenas con un operador de 'rango parcial desde'
Tengo el siguiente código simple escrito en Swift 3:
let str = "Hello, playground"
let index = str.index(of: ",")!
let newStr = str.substring(to: index)
Desde Xcode 9 beta 5, recibo la siguiente advertencia:
'
substring(to:)
' está en desuso: utiliceString
el subíndice de división con un operador de 'rango parcial desde'.
¿Cómo se puede utilizar este subíndice de corte con rango parcial en Swift 4?
Debes dejar un lado vacío , de ahí el nombre "rango parcial".
let newStr = str[..<index]
Lo mismo se aplica al alcance parcial de los operadores, simplemente deje el otro lado vacío:
let newStr = str[index...]
Tenga en cuenta que estos operadores de rango devuelven un archivo Substring
. Si desea convertirlo en una cadena, use String
la función de inicialización de:
let newStr = String(str[..<index])
Puede leer más sobre las nuevas subcadenas aquí .
Convertir subcadena (Swift 3) en corte de cadena (Swift 4)
Ejemplos en Swift 3, 4:
let newStr = str.substring(to: index) // Swift 3
let newStr = String(str[..<index]) // Swift 4
let newStr = str.substring(from: index) // Swift 3
let newStr = String(str[index...]) // Swift 4
let range = firstIndex..<secondIndex // If you have a range
let newStr = = str.substring(with: range) // Swift 3
let newStr = String(str[range]) // Swift 4
Rápido 5, 4
Uso
let text = "Hello world"
text[0] // H
text[...3] // "Hell"
text[6..<text.count] // world
text[NSRange(location: 6, length: 3)] // wor
Código
import Foundation
public 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)
}
}
Más corto en Swift 4/5:
let string = "123456"
let firstThree = String(string.prefix(3)) //"123"
let lastThree = String(string.suffix(3)) //"456"