致命错误:无法从空字符串形成字符

Mer*_*tio 5 string char fatal-error swift

所以我有一个功能,在字符串的末尾剥去一个尾随的","(逗号+空格),即使我确保字符串不为空,我也会收到上述错误.以下代码:

print("stripping trailing commas")
        for var detail in details {
            if detail.contains(",") {
print(detail)
                detail.remove(at: detail.endIndex)    // <-- Removes last space
                detail.remove(at: detail.endIndex)    // <-- Removes last comma
            }
        }
Run Code Online (Sandbox Code Playgroud)

...结果int以下控制台输出:

stripping trailing commas
2016, 
fatal error: Can't form a Character from an empty String
Run Code Online (Sandbox Code Playgroud)

第一个实例detail.remove(at: detail.endIndex)正在由调试器突出显示,虽然我无法确定控制台消息中是否存在空间,但我在列表中的每个条目的末尾添加","因此任何实际包含的字符串都是逗号不仅应该有字符(如控制台所指示的那样),但它最后应该有两个字符需要被剥离.

在此先感谢您对导致错误的原因以及如何解决的任何帮助?

Joe*_*ith 9

尝试改变

detail.remove(at: detail.endIndex)
Run Code Online (Sandbox Code Playgroud)

detail.remove(at: detail.index(before: detail.endIndex))
Run Code Online (Sandbox Code Playgroud)


小智 2

import Foundation一种无需使用(需要)或计算索引即可完成此操作的简单方法contains()如下所示:

let details = ["one, two, three, ", "a, b", "once, twice, thrice, so nice, ", ""]

let filtered = details.map { (original: String) -> String in
  guard original.hasSuffix(", ") else { return original }
  return String(original.characters.dropLast(2))
}

print(filtered) // -> "["one, two, three", "a, b", "once, twice, thrice, so nice", ""]\n"
Run Code Online (Sandbox Code Playgroud)

这不会删除返回数组中的任何空字符串。如果您需要该功能,可以轻松添加。