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

Explanation of lastIndex of: and firstIndex of: used in a string in Swift

我正在解决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:")")! 的作用

试验这类问题的最佳地点是 Playground. Also, check out the 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 因此它将 return 在 a 之后 ) 的索引。

建议总是打破语句并了解每个表达式的作用。