例如,我有通常的快速枚举
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
}
}
有可能实现这个吗?感谢
答案 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