我正在解决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:")")!
的作用
答案 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
的索引。
建议始终是中断该语句并了解每个表达式的作用。