Я хочу создать расширение для класса String в Swift, которое позволит вам получить подстроку с помощью оператора индекса, как в Python. Это можно сделать с помощью класса Range следующим образом.
extension String {
subscript (range: Range<Int>) -> String? {
if range.startIndex < 0 || range.endIndex > count(self) {
return nil
}
let range = Range(start: advance(startIndex, range.startIndex), end: advance(startIndex, range.endIndex))
return substringWithRange(range)
}
}
Это позволяет использовать следующее
let string = "OptimusPrime"
string[0...6] // "Optimus"
Однако я хочу иметь возможность индексировать строку как с конца, так и с начала, используя отрицательные целые числа.
string[7...(-1)] // "Prim"
Поскольку класс Range не допускает, чтобы startIndex
превышало endIndex
, приведенного выше расширения недостаточно для достижения такого поведения.
Поскольку объекты Range, по-видимому, не могут использоваться для этого расширения, мне имеет смысл просто использовать тот же синтаксис, что и в Python.
string[0:2] // "Op"
string[0:-1] // "OptimusPrim"
Это возможно? Как мне это сделать?