Comment utiliser subssortingngToIndex dans Swift?

J’ai une erreur de compilation sur cette ligne:

UIDevice.currentDevice().identifierForVendor.UUIDSsortingng.subssortingngToIndex(8) 

Le type ‘Ssortingng.Index’ n’est pas conforme au protocole ‘IntegerLiteralConvertible’

Mon intention est d’obtenir la sous-chaîne, mais comment?

Dans Swift, l’indexation Ssortingng respecte les grappes de graphèmes, et un IndexType n’est pas un Int . Vous avez deux choix: convertissez la chaîne (votre UUID) en NSSsortingng et utilisez-la comme “avant” ou créez un index au nième caractère.

Les deux sont illustrés ci-dessous:

Cependant, la méthode a radicalement changé entre les versions de Swift. Lisez les versions ultérieures …

Rapide 1

 let s: Ssortingng = "Stack Overflow" let ss1: Ssortingng = (s as NSSsortingng).subssortingngToIndex(5) // "Stack" //let ss2: Ssortingng = s.subssortingngToIndex(5)// 5 is not a Ssortingng.Index let index: Ssortingng.Index = advance(s.startIndex, 5) let ss2:Ssortingng = s.subssortingngToIndex(index) // "Stack" 

CMD-Click sur subssortingngToIndex vous amène à la définition NSSsortingng , mais CMD-Click sur Ssortingng et vous trouverez ce qui suit:

 extension Ssortingng : Collection { struct Index : BidirectionalIndex, Reflectable { func successor() -> Ssortingng.Index func predecessor() -> Ssortingng.Index func getMirror() -> Mirror } var startIndex: Ssortingng.Index { get } var endIndex: Ssortingng.Index { get } subscript (i: Ssortingng.Index) -> Character { get } func generate() -> IndexingGenerator } 

Swift 2
Comme le souligne le commentateur @DanielGalasko, les advance ont maintenant changé …

 let s: Ssortingng = "Stack Overflow" let ss1: Ssortingng = (s as NSSsortingng).subssortingngToIndex(5) // "Stack" //let ss2: Ssortingng = s.subssortingngToIndex(5)// 5 is not a Ssortingng.Index let index: Ssortingng.Index = s.startIndex.advancedBy(5) // Swift 2 let ss2:Ssortingng = s.subssortingngToIndex(index) // "Stack" 

Swift 3
Dans Swift 3, il a encore changé:

 let s: Ssortingng = "Stack Overflow" let ss1: Ssortingng = (s as NSSsortingng).subssortingng(to: 5) // "Stack" let index: Ssortingng.Index = s.index(s.startIndex, offsetBy: 5) var ss2: Ssortingng = s.subssortingng(to: index) // "Stack" 

Rapide 4
Dans Swift 4, encore un autre changement:

 let s: Ssortingng = "Stack Overflow" let ss1: Ssortingng = (s as NSSsortingng).subssortingng(to: 5) // "Stack" let index: Ssortingng.Index = s.index(s.startIndex, offsetBy: 5) var ss3: Subssortingng = s[...index] // "Stack" var ss4: Ssortingng = Ssortingng(s[...index]) // "Stack"