为什么世界上的Swift String操作如此复杂和令人厌烦?
我必须反向遍历String但忽略第一个char。现在可以这样做:
var firstTime = true
for i in textBefore.characters.reversed() {
if firstTime {
firstTime = false
} else {
if String(i).personalFunction() {
// something
} else {
// something else
}
}
}
但实际上我只是想做点什么:
textBefore = textBefore.characters.reversed()
for i in 1...textBefore.characters.count {
if textBefore.get(i).personalFunction() {
// something
} else {
// something else
}
}
那么为什么我们不能将索引作为int。为什么textBefore.characters.reversed()不是String或只是让String具有反向函数。所有这些问题让使用Swift中的Strings变得非常令人沮丧,并使我们做了愚蠢的事情,如将String转换为字符数组:S或类似于我上面提出的解决方案的东西......我们也无法做到旧式的循环...我只需要一些Swift大师指出我的大脑正确的方向为这些东西。
答案 0 :(得分:7)
string.characters
是一组字符。
使用reversed()
以相反的顺序访问元素,使用dropFirst()
跳过反向集合的初始元素:
let string = "ab"
for ch in string.characters.reversed().dropFirst() {
print(ch)
// `ch` is a Character. Use `String(ch)` if you need a String.
}
输出:
b a
答案 1 :(得分:1)
你可以做类似你的第二个。输入for
后,您可以直接从字符串中获取索引。在Swift中,字符串只是一个字符数组。
textBefore = String(textBefore.characters.reversed())
for i in 1...textBefore.characters.count {
if textBefore[i].personalFunction() {
// something
} else {
// something else
}
}