¿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'

Resuelto Adrian asked hace 7 años • 21 respuestas

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: utilice Stringel 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?

Adrian avatar Aug 08 '17 15:08 Adrian
Aceptado

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 Stringla función de inicialización de:

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

Puede leer más sobre las nuevas subcadenas aquí .

Tamás Sengel avatar Aug 08 '2017 08:08 Tamás Sengel

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
Mohammad Sadegh Panadgoo avatar Oct 07 '2017 05:10 Mohammad Sadegh Panadgoo

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)
  }
}
dimpiax avatar Oct 08 '2017 18:10 dimpiax

Más corto en Swift 4/5:

let string = "123456"
let firstThree = String(string.prefix(3)) //"123"
let lastThree = String(string.suffix(3)) //"456"
ilnur avatar Mar 23 '2018 10:03 ilnur