0

我正在用 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:")")!的,以及做什么

4

1 回答 1

1

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

现在让我们来看看每一条语句:

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第一次迭代,因此它将返回)after的索引a

建议总是打破陈述并了解每个表达式在做什么。

于 2019-09-20T10:43:54.937 回答