【发布时间】:2019-03-07 07:32:43
【问题描述】:
以下代码遇到了一个奇怪的问题:
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" 它不会崩溃。有多种方法可以解决这个问题,但我想知道它为什么会崩溃?
【问题讨论】:
-
我对此没有确切的答案,但
\r\n是一个段落中断,就像\r和\n分别是段落中断一样。因此,崩溃可能是由range函数引起的,它在某一点将\r\n视为单个字符,而在另一点将其视为两个单独的字符。 -
@JoakimDanielson:这肯定会导致问题,但我想知道这种行为是“故意的”还是错误。
-
《Swift 编程语言》一书在列出 escaped special characters 时不包含 \r\n,但较早的文档(参考 NSString)确实包含它。我还发现在 \r\n 上执行
count会产生 1 的长度,但是当使用character(at:)时,我可以为0和1执行此操作,因此看起来它在字符串为作为字符串对象或单个字符访问。也许不相关但有趣:)
标签: swift xcode swift4 swift-subscript