extension example swift substring

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?