如何使用Swift中的字符串快速枚举字符串?

11 浏览
0 Comments

如何使用Swift中的字符串快速枚举字符串?

这个问题已经有了答案:

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

这能实现吗? 谢谢

admin 更改状态以发布 2023年5月22日
0
0 Comments

你不能简单地通过字符串枚举字符串。你需要告诉它子字符串应该有哪些范围。

这里是通过单词实现的:

var str:String = "Hello World!"
str.enumerateSubstringsInRange(Range(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(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
    }
}

0
0 Comments

你可以使用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(" ") {
    ...
}

0