edit/update:
Xcode 11 ? Swift 5.1 or later
extension StringProtocol {
func distance(of element: Element) -> Int? { firstIndex(of: element)?.distance(in: self) }
func distance<S: StringProtocol>(of string: S) -> Int? { range(of: string)?.lowerBound.distance(in: self) }
}
extension Collection {
func distance(to index: Index) -> Int { distance(from: startIndex, to: index) }
}
extension String.Index {
func distance<S: StringProtocol>(in string: S) -> Int { string.distance(to: self) }
}
Playground testing
let letters = "abcdefg"
let char: Character = "c"
if let distance = letters.distance(of: char) {
print("character (char) was found at position #(distance)") // "character c was found at position #2
"
} else {
print("character (char) was not found")
}
let string = "cde"
if let distance = letters.distance(of: string) {
print("string (string) was found at position #(distance)") // "string cde was found at position #2
"
} else {
print("string (string) was not found")
}
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…