Swift:在Array中的句子中搜索字符串

时间:2016-06-16 14:17:43

标签: arrays swift

我正在开发搜索文本字段。我有一系列看起来像这样的字符串......

var keywords:[String] = ["dance, music and hippo", "apple juice, tomato"]

我尝试使用功能包含,但效果不佳。

for i in 0..<keywordsArr.count {
    if(!keywordsArr[i].contains(searchTextField.text!)){
        print("removed \(keywordsArr[i])")
        keywordsArr.removeAtIndex(i)
    }
}

这是我正在使用的扩展程序。

extension String {

    func contains(find: String) -> Bool{
        return self.rangeOfString(find) != nil
    }
}

结果应该是我用文本调用函数:“music”,它应该返回该字符串的索引

2 个答案:

答案 0 :(得分:2)

你可以使用filter非常简洁地实现这一点,它返回一个只包含闭包的元素的数组。您还应该使用可选绑定以避免使用searchTextField.text

的强制解包
if let text = searchTextField.text {
    keywordsArr = keywordsArr.filter { $0.contains(text) }
}

答案 1 :(得分:0)

首先你不应该在循环中编辑数组大小,因为每次迭代你都会用“keywordsArr.count”重新计算它的大小,这会导致异常
你可以用这几行来返回字符串的索引(如果它包含在您的数组中),如果不包含,则返回-1。祝你好运

func doesContain(array:[String], searchString:String) -> Int {
    let size = array.count

    for i in 0..<size {
        if array[i].rangeOfString(searchString) != nil {
            print("exists")
            print("removed \(array[i])")
            return i
        }
    }
    return -1
}
var keywords:[String] = ["dance, music and hippo", "apple juice, tomato"]

doesContain(keywords, searchString: "music")