在Swift中迭代部分String

时间:2016-12-01 14:09:05

标签: swift swift3

为什么世界上的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大师指出我的大脑正确的方向为这些东西。

2 个答案:

答案 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
  }
}