找到从给定索引开始的第一次出现的字符串

时间:2016-12-07 10:11:40

标签: ios swift

我想找到第一个出现在给定索引处的字符串。

基于this answer我创建了以下功能:

func index(of string: String, from startIndex: String.Index? = nil, options: String.CompareOptions = .literal) -> String.Index? {
    if let startIndex = startIndex {
        return range(of: string, options: options, range: startIndex ..< string.endIndex, locale: nil)?.lowerBound
    } else {
        return range(of: string, options: options, range: nil, locale: nil)?.lowerBound
    }
}

不幸的是,带索引的部分不起作用。

例如,以下代码返回nil而不是3

let str = "test"
str.index(of: "t", from: str.index(str.startIndex, offsetBy: 1))

1 个答案:

答案 0 :(得分:2)

您将搜索限制在错误的范围内。 string.endIndex应为self.endIndex(或仅endIndex)。

进一步评论:

  • range: nillocale: nil可以省略,因为那些 参数有默认值。

  • String.Index可缩短为Index内的String 扩展方法,类似于String.CompareOptions

  • 我不会因此而调用可选参数startIndexstartIndex的{​​{1}}属性混淆。

全部放在一起:

String

或者

extension String {
    func index(of string: String, from startPos: Index? = nil, options: CompareOptions = .literal) -> Index? {
        if let startPos = startPos {
            return range(of: string, options: options, range: startPos ..< endIndex)?.lowerBound
        } else {
            return range(of: string, options: options)?.lowerBound
        }
    }
}