ios - 复杂的 Swift 扩展

标签 ios swift swift-extensions

我想在 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"

这可能吗?我该如何去做呢?

最佳答案

我认为你可以获得类似 python 的语法,如下所示:

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

这会让你走“bla bla”[0,3]

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

关于ios - 复杂的 Swift 扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31959078/

相关文章:

iOS with Swift : "_main", 引用自:主可执行文件的隐式入口/启动

objective-c - 滑动时无法识别的选择器

javascript - React Native 中组件之间的通信(子 -> 父)

ios - 如何在 swift 中创建一个由类实例填充的数组?

ios - 如何为变化的高度添加观察者?

IOS 深度链接 - fb-messenger、slack、whatsapp、viber

ios - 在 WatchKit 中使用应用内购买功能来获得一目了然的功能和复杂功能

swift - 未能实现符合类型的协议(protocol)扩展

swift - 非 -'@objc' 方法不满足带有条件扩展的 '@objc' 协议(protocol)的可选要求

具有泛型类型的 Swift 协议(protocol)