我正在开发搜索文本字段。我有一系列看起来像这样的字符串......
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”,它应该返回该字符串的索引
答案 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")