example - substring to string swift 3
¿Cómo usar substringToIndex en Swift? (1)
En Swift, String
indexación de String
respeta los clústeres de grafemas, y un IndexType
no es un Int
. Tiene dos opciones: convertir la cadena (su UUID) en un NSString, y usarlo como "antes", o crear un índice para el enésimo carácter.
Ambos se ilustran a continuación:
Sin embargo, el método ha cambiado radicalmente entre las versiones de Swift. Lee abajo para versiones posteriores ...
Swift 1
let s: String = "Stack Overflow"
let ss1: String = (s as NSString).substringToIndex(5) // "Stack"
//let ss2: String = s.substringToIndex(5)// 5 is not a String.Index
let index: String.Index = advance(s.startIndex, 5)
let ss2:String = s.substringToIndex(index) // "Stack"
CMD-Click en substringToIndex
lleva confusamente a la definición de NSString
; sin embargo, CMD-Click en String
y encontrará lo siguiente:
extension String : Collection {
struct Index : BidirectionalIndex, Reflectable {
func successor() -> String.Index
func predecessor() -> String.Index
func getMirror() -> Mirror
}
var startIndex: String.Index { get }
var endIndex: String.Index { get }
subscript (i: String.Index) -> Character { get }
func generate() -> IndexingGenerator<String>
}
Swift 2
Como comenta el comentarista @DanielGalasko, el advance
ahora ha cambiado ...
let s: String = "Stack Overflow"
let ss1: String = (s as NSString).substringToIndex(5) // "Stack"
//let ss2: String = s.substringToIndex(5)// 5 is not a String.Index
let index: String.Index = s.startIndex.advancedBy(5) // Swift 2
let ss2:String = s.substringToIndex(index) // "Stack"
Swift 3
En Swift 3, ha cambiado de nuevo:
let s: String = "Stack Overflow"
let ss1: String = (s as NSString).substring(to: 5) // "Stack"
let index: String.Index = s.index(s.startIndex, offsetBy: 5)
var ss2: String = s.substring(to: index) // "Stack"
Swift 4
En Swift 4, otro cambio más:
let s: String = "Stack Overflow"
let ss1: String = (s as NSString).substring(to: 5) // "Stack"
let index: String.Index = s.index(s.startIndex, offsetBy: 5)
var ss3: Substring = s[...index] // "Stack"
var ss4: String = String(s[...index]) // "Stack"
Esta pregunta ya tiene una respuesta aquí:
Tengo un error de compilación en esta línea:
UIDevice.currentDevice().identifierForVendor.UUIDString.substringToIndex(8)
Tipo ''String.Index'' no se ajusta al protocolo ''IntegerLiteralConvertible''
Mi intención es obtener la subcadena, pero ¿cómo?