复杂 Swift 扩展
Complicated Swift Extension
我想为 Swift 中的字符串 class 创建一个扩展,允许您像 Python 中那样通过下标运算符获取子字符串。这可以通过以下方式
使用范围 class 来完成
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"
由于范围 class 不允许 startIndex
大于 endIndex
,上述扩展不足以实现此行为。
由于 Range 对象显然不能用于此扩展,因此我可以简单地使用与 Python
中相同的语法
string[0:2] // "Op"
string[0:-1] // "OptimusPrim"
这可能吗?我该怎么做?
我认为您可以获得类似 python 的语法,如下所示:
subscript (start:Int, end:Int) -> String?
哪个会让你走"bla bla"[0,3]
然后如果你输入负数,只需将其转换为字符串长度减去负数,这样范围就有效了
我想为 Swift 中的字符串 class 创建一个扩展,允许您像 Python 中那样通过下标运算符获取子字符串。这可以通过以下方式
使用范围 class 来完成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"
由于范围 class 不允许 startIndex
大于 endIndex
,上述扩展不足以实现此行为。
由于 Range 对象显然不能用于此扩展,因此我可以简单地使用与 Python
中相同的语法string[0:2] // "Op"
string[0:-1] // "OptimusPrim"
这可能吗?我该怎么做?
我认为您可以获得类似 python 的语法,如下所示:
subscript (start:Int, end:Int) -> String?
哪个会让你走"bla bla"[0,3]
然后如果你输入负数,只需将其转换为字符串长度减去负数,这样范围就有效了