我在swift3中有一个长字符串,想检查它是否包含word1 和 word2。它也可能超过2个搜索词。我发现了以下解决方案:
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)
答案 0 :(得分:6)
如果您正在寻找更少的代码:
let text = "Hello Swift-world"
let wordList = ["Hello", "world"]
let success = !wordList.contains(where: { !text.contains($0) })
print(success)
它也比你的解决方案更有效率,因为
contains
方法会在“未包含”字词后立即返回
找到了。
答案 1 :(得分:2)
一个更加Swifty的解决方案,它会在找到一个不存在的单词后停止搜索:
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
答案 2 :(得分:2)
另一种可能性is regular expressions:
http.get(url, function onResponse(res) {
gm(res)
.resize(250,250)
.stream(function(err, stdout, stderr){
if(debug)console.log("Resized "+key+" and created "+key+"_thumb.jpg");
if(err){
console.log("Error resizing image. Message:",err);
}
else{
var data = {
Bucket: 'bucket-name',
Key: key+"_thumb.jpg",
Body: stdout,
ACL: "public-read",
ContentType:"image/jpeg"
};
s3 = new aws.S3()
s3.upload(data, function(err, resp) {
if(debug)console.log(resp);
});
s3=null;
stdout=null;
data=null;
}
});
res=null;
});