swift3中有一个长字符串,希望检查它是否包含word1、和 word2。它也可能是两个以上的搜索词。我发现了以下解决方案:
var Text = "Hello Swift-world"
var TextArray = ["Hello", "world"]
var count = 0
for n in 0..<TextArray.count {
    if (Text.contains(TextArray[n])) {
        count += 1
    }
}
if (count == TextArray.count) {
    print ("success")
}但这似乎很复杂,难道没有更容易的办法来解决这个问题吗?(Xcode8和swift3)
发布于 2017-01-27 20:45:30
如果您正在寻找更少的代码:
let text = "Hello Swift-world"
let wordList = ["Hello", "world"]
let success = !wordList.contains(where: { !text.contains($0) })
print(success)它也比您的解决方案更有效率,因为contains方法一找到“不包含”的单词就会返回。
在Swift 4或更高版本中,您可以使用allSatisfy
let success = wordList.allSatisfy(text.contains)发布于 2017-01-27 20:45:01
一个更快速的解决方案将停止搜索它发现了一个不存在的词:
var text = "Hello Swift-world"
var textArray = ["Hello", "world"]
let match = textArray.reduce(true) { !$0 ? false : (text.range(of: $1) != nil ) }另一种在发现不匹配后停止的方法:
let match = textArray.first(where: { !text.contains($0) }) == nil发布于 2017-01-27 20:58:06
is regular expressions的另一种可能性
// *'s are wildcards
let regexp = "(?=.*Hello*)(?=.*world*)"
if let range = Text.range(of:regexp, options: .regularExpression) {
    print("this string contains Hello world")
} else {
    print("this string doesn't have the words we want")
}https://stackoverflow.com/questions/41902580
复制相似问题