trzeba użyć metody distanceTo (indeks) w stosunku do oryginalnego łańcucha rozpocząć index:
let intValue = letters.startIndex.distanceTo(index)
Możesz również rozszerzyć String ze sposobu, aby powrócić do pierwszego wystąpienia znaku w ciągu znaków jako następująco:
extension String {
func indexDistanceOfFirst(character character: Character) -> Int? {
guard let index = characters.indexOf(character) else { return nil }
return startIndex.distanceTo(index)
}
}
let letters = "abcdefg"
let char: Character = "c"
if let index = letters.indexDistanceOfFirst(character: char) {
print("character \(char) was found at position #\(index)") // "character c was found at position #2\n"
} else {
print("character \(char) was not found")
}
Xcode 8 • Swift 3
extension String {
func indexDistance(of character: Character) -> Int? {
guard let index = characters.index(of: character) else { return nil }
return distance(from: startIndex, to: index)
}
}
let letters = "abcdefg"
let char: Character = "c"
if let index = letters.indexDistance(of: char) {
print("character \(char) was found at position #\(index)") // "character c was found at position #2\n"
} else {
print("character \(char) was not found")
}
Xcode 9 • Swift 4
extension String {
func indexDistance(of character: Character) -> Int? {
guard let index = index(of: character) else { return nil }
return distance(from: startIndex, to: index)
}
}
Innym możliwym rozwiązaniem Swift 4 jest powrót indeksu encodedOffset
:
extension String {
func encodedOffset(of character: Character) -> Int? {
return index(of: character)?.encodedOffset
}
func encodedOffset(of string: String) -> Int? {
return range(of: string)?.lowerBound.encodedOffset
}
}
let letters = "abcdefg"
let char: Character = "c"
if let index = letters.encodedOffset(of: char) {
print("character \(char) was found at position #\(index)") // "character c was found at position #2\n"
} else {
print("character \(char) was not found")
}
Do U mają xcode 7,2 i szybką 2.x? – aaisataev
Właściwie, w tej chwili pobieram Xcode 7.2. – Christopher
Dla łańcucha znaków unikalnych: 'let index = String (letters.characters.reverse()). Characters.indexOf (" c ")! DistanceTo (letters.endIndex)' – dfri