快速的子字符串崩溃(需要原因)

时间:2019-03-07 07:32:44

标签: swift xcode swift4 swift-subscript

我坚持使用以下代码来解决一个奇怪的问题:

var testString = """
This is test \r\n Pass        Fail
"""

if let charIndex = testString.range(of: "\n")?.lowerBound {
    let substring = testString[charIndex...]
    print(substring.reversed())
    var revereseString = String(substring.reversed())
}

我的应用程序崩溃并出现以下错误:致命错误:超出范围:索引

任何人都可以解释为什么在特定情况下它会崩溃。如果我从字符串中删除“ \ r”,它将不会崩溃。有多种方法可以解决此问题,但是我想知道为什么它崩溃了?

1 个答案:

答案 0 :(得分:2)

这是因为Swift\r\n视为一个字符,

let foo = "\r"
foo.count // 1
let fee = "\n"
fee.count // 1
let bee = "\r\n"
bee.count // 1

您的一种解决方案是在它们之间\r \n之间留一个空格,这将使其运行,因为现在它们是2个不同的字符。

如何?

缓冲区将它们注册为变量中的一个字符,但在.range迭代器中视为两个字符,这导致崩溃。