【问题标题】:How to make string fast enumeration in string in Swift? [duplicate]如何在Swift中的字符串中快速枚举字符串? [复制]
【发布时间】:2015-01-26 15:04:17
【问题描述】:

例如我有通常的快速枚举

for (var myChar:Character) in "Hello World!"
{//code }

这很好用,我可以对这个字符串的每个字符做任何我想做的事情。 但是如果我想使用字符串而不是字符怎么办,像这样

for ( var myStr : String) in "Hello World!"//this is error
{
    switch myStr
    {
    case "Hello":
    //code
    case "World!":
    //code
    default:
        break
    }
}

可以实现吗?谢谢

【问题讨论】:

    标签: swift


    【解决方案1】:

    可以使用componentsSeparatedByCharactersInSet将字符串分割成字符串数组:

    import Foundation // not necessary if you import UIKit or Cocoa
    
    for myStr in "Hello World!".componentsSeparatedByCharactersInSet(NSCharacterSet(charactersInString:" ")) {
        switch myStr {
        case "Hello":
            println("well hello there")
        case "World!":
            println("the whole world")
        default:
            println("something else")
        }
    }
    

    也可以使用NSCharacterSet.whitespaceCharacterSet()NSCharacterSet.whitespaceAndnewlineCharacterSet() 代替NSCharacterSet(charactersInString:" "),具体取决于您的单词使用哪种字符。


    如果您的单词由一个空格分隔,您可以使用较短的:

    for myStr in "Hello World!".componentsSeparatedByString(" ") {
        ...
    }
    

    【讨论】:

    • 这对你有用吗?如果其中一个答案解决了您的问题,请通过单击答案旁边的复选标记将其变为绿色来接受它。
    【解决方案2】:

    您不能仅通过字符串对字符串进行枚举。你需要告诉子字符串必须有什么范围。

    这里是用文字来完成的:

    var str:String = "Hello World!"
    str.enumerateSubstringsInRange(Range<String.Index>(start:str.startIndex , end: str.endIndex), options: NSStringEnumerationOptions.ByWords) { (substring, substringRange, enclosingRange, stop) -> () in
        switch substring
        {
        case "Hello":
            println("Hi")
        case "World":
            println("universe")
        default:
            break
        }
    }
    

    但实际上我在作弊。在您的代码中,您想切换为World!,但我使用的是World。我这样做是因为在基于单词的枚举中忽略了非字母数字字符。

    但我们有所有信息可以修复它

    var str:String = "Hello World!"
    str.enumerateSubstringsInRange(Range<String.Index>(start:str.startIndex , end: str.endIndex), options: NSStringEnumerationOptions.ByWords) { (substring, substringRange, enclosingRange, stop) -> () in
    
        var enclosingStr = str.substringWithRange(enclosingRange)
        enclosingStr = enclosingStr.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())
        switch enclosingStr
        {
        case "Hello":
            println("Hi")
        case "World!":
            println("universe")
        default:
            break
        }
    }
    

    【讨论】:

      【解决方案3】:

      在 Swift 2.0 中,我使用

      let line = "Hello, world"
      for (index, value) in line.characters.enumerate() {
        // do something
      }
      

      【讨论】:

        猜你喜欢
        • 2019-11-03
        • 1970-01-01
        • 2018-10-04
        • 1970-01-01
        • 1970-01-01
        • 2015-04-12
        • 1970-01-01
        • 2021-11-25
        • 1970-01-01
        相关资源
        最近更新 更多