2

我想在 Swift 中为 String 类创建一个扩展,它允许您像在 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"

这可能吗?我该怎么做呢?

4

1 回答 1

2

我认为你可以像这样得到类似 python 的语法:

subscript (start:Int, end:Int) -> String?

这会让你走"bla bla"[0,3]

那么如果你输入一个负数,只需将其转换为字符串长度减去负数,这样范围就有效了

于 2015-08-12T08:02:32.123 回答