如何在Swift中的字符串中进行字符串快速枚举?

时间:2014-11-28 00:37:33

标签: swift

例如,我有通常的快速枚举

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

有可能实现这个吗?感谢

3 个答案:

答案 0 :(得分:2)

您可以使用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(charactersInString:" ")也可以使用NSCharacterSet.whitespaceCharacterSet()NSCharacterSet.whitespaceAndnewlineCharacterSet(),具体取决于哪些字符划分您的字词。


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

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

答案 1 :(得分:1)

您不能只通过字符串对字符串进行枚举。你需要知道子串必须具有的范围。

这是用文字完成的:

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

答案 2 :(得分:1)

在Swift 2.0中,我使用

int32_t