fatal error: Can't form a Character from an empty String
fatal error: Can't form a Character from an empty String
所以我有一个函数可以去除字符串末尾的尾随“,”(逗号 + space),即使我确保字符串是不是空的。以下代码:
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
}
}
...结果为以下控制台输出:
stripping trailing commas
2016,
fatal error: Can't form a Character from an empty String
调试器突出显示了第一个实例 detail.remove(at: detail.endIndex)
,虽然我不能确定 space 是否存在于控制台消息中,但我在列表中每个条目的末尾,因此任何实际包含逗号的字符串不仅应该有字符(如控制台所示),还应该在末尾有额外的两个字符需要被删除。
在此先感谢您对导致错误的原因以及如何解决的任何帮助?
尝试改变
detail.remove(at: detail.endIndex)
至
detail.remove(at: detail.index(before: detail.endIndex))
不使用 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"
这不会删除返回数组中的任何空字符串。如果您需要该功能,可以轻松添加。
所以我有一个函数可以去除字符串末尾的尾随“,”(逗号 + space),即使我确保字符串是不是空的。以下代码:
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
}
}
...结果为以下控制台输出:
stripping trailing commas
2016,
fatal error: Can't form a Character from an empty String
调试器突出显示了第一个实例 detail.remove(at: detail.endIndex)
,虽然我不能确定 space 是否存在于控制台消息中,但我在列表中每个条目的末尾,因此任何实际包含逗号的字符串不仅应该有字符(如控制台所示),还应该在末尾有额外的两个字符需要被删除。
在此先感谢您对导致错误的原因以及如何解决的任何帮助?
尝试改变
detail.remove(at: detail.endIndex)
至
detail.remove(at: detail.index(before: detail.endIndex))
不使用 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"
这不会删除返回数组中的任何空字符串。如果您需要该功能,可以轻松添加。