【问题标题】:Iterate through a String Swift 2.0遍历字符串 Swift 2.0
【发布时间】:2015-08-26 08:52:17
【问题描述】:

我正在尝试在 Swift Playgrounds 中编写一段非常简单的代码。

var word = "Zebra"

for i in word {
  print(i)
}

但是,我总是在第 3 行遇到错误。

“字符串”没有名为“生成器”的成员

关于为什么这不起作用的任何想法?注意:我在 Xcode 7 中工作,使用 Swift 2.0 (Strings and Characters).

【问题讨论】:

    标签: swift swift-playground swift2 xcode7


    【解决方案1】:

    从 Swift 2 开始,String 不符合 SequenceType。但是,您可以在String 上使用characters 属性。 characters 返回一个符合SequenceTypeString.CharacterView,因此可以使用for 循环进行迭代:

    let word = "Zebra"
    
    for i in word.characters {
        print(i)
    }
    

    或者,您可以向String 添加扩展名,使其符合SequenceType

    extension String: SequenceType {}
    
    // Now you can use String in for loop again.
    for i in "Zebra" {
        print(i)
    }
    

    尽管如此,我确信 Apple 有理由删除 StringSequenceType 的一致性,因此第一个选项似乎是更好的选择。不过,探索什么是可能的很有趣。

    【讨论】:

    • String不符合SequenceType的原因是同一个String可以用多个元素序列表示。
    【解决方案2】:

    String 不再符合SequenceType。但是,您可以通过这种方式访问​​它的 characters 属性:

    var word = "Zebra"
    
    for i in word.characters {
        print(i)
    }
    

    请注意,文档尚未更新。

    【讨论】:

    • 感谢这在我不知道如何在字符串上使用 reverse 时帮助了我。必须是for char in string.characters.reverse() {...}
    【解决方案3】:

    斯威夫特 3.0.1

    使用characters 属性的indices 属性访问字符串中单个字符的所有indices

    let greeting = "Guten Tag!"
    for index in greeting.characters.indices {
    print("\(greeting[index]) ", terminator: "")
    }
    // Prints "G u t e n   T a g ! "
    

    访问https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/StringsAndCharacters.html

    【讨论】:

      【解决方案4】:

      斯威夫特 4

      Forin循环:

      let word = "Swift 4"
      for i in word {
          print(i)
      }
      

      地图示例:

      let word = "Swift 4"
      _ = word.map({ print($0) })
      

      forEach 示例:

      let word = "Swift 4"
      word.forEach({ print($0) })
      

      【讨论】:

        猜你喜欢
        • 2018-05-15
        • 1970-01-01
        • 2011-08-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多