Swift中字符串中使用的lastIndex of:和firstIndex of的解释

时间:2019-09-20 10:23:21

标签: swift xcode lastindexof

我正在解决Swift中的编程问题,但是我在网上找到了一个我不完全理解的解决方案,问题是:编写一个函数来反转输入字符串中(可能嵌套的)括号中的字符。解决方案是

var inputString = "foo(bar)baz(ga)kjh"

    var s = inputString
    while let openIdx = s.lastIndex(of: "(") {
        let closeIdx = s[openIdx...].firstIndex(of:")")!
        s.replaceSubrange(openIdx...closeIdx, with: s[s.index(after: openIdx)..<closeIdx].reversed())
    }

print (s) // output: foorabbazagkjh (the letters inside the braces are reversed) 

在此情况下,我想了解有关以下信息的详细信息:lastIndex(of: 以及let closeIdx = s[openIdx...].firstIndex(of:")")!的作用

1 个答案:

答案 0 :(得分:0)

尝试这类问题的最佳场所是Playground。另外,请查看documentation

现在让我们仔细阅读以下每个语句:

let openIdx = s.lastIndex(of: "(") // it will find the last index of "(", the return type here is Array.Index?

因此,如果我在索引之后打印值,包括直到字符串的结尾,那将是

print(s[openIdx!...]) // `!` exclamation is used for forced casting
// (ga)kjh

现在是您的第二个问题;

let closeIdx = s[openIdx...].firstIndex(of:")")!

在第一次迭代中将其分解为s[openIdx...]等于(ga)kjh,因此它将在)之后返回a的索引。

建议始终是中断该语句并了解每个表达式的作用。