如何使用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日
你不能简单地通过字符串枚举字符串。你需要告诉它子字符串应该有哪些范围。
这里是通过单词实现的:
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 } }
你可以使用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(" ") { ... }