我一直在搞弄Swift的XCode 6 Playground中的内容过滤器系统,想法是,如果我输入一个包含多个单词的字符串(例如:“ Apple Oranges Bananas”),该函数会将这个字符串分成一个数组,然后循环通过数据库使用这些单词中的任何一个,如果存在匹配项,则应返回true。因此,如果我输入整个单词,我的函数将返回true,但是当我输入单个字母时,函数将返回false ...我使用了“ RangeOfString”行,因此它应该逐个字符地经过单词,但我不知道。 。
这是代码。
// Playground - noun: a place where people can play
import UIKit
class Person {
var name = ""
var age = 0
init(name: String, age:Int) {
self.name = name
self.age = age
}
}
var filteredItems = [Person]()
var items = [ Person(name: "Anders", age: 23), Person(name: "Alice", age: 56), Person(name: "Amanda", age: 88)]
items.append(Person(name: "Andrew", age: 23))
func filterContentForSearchText(searchText : String) -> Bool
{
var filtered = false
//Filter the array using the filter method
filteredItems = items.filter({( search : Person) -> Bool in
let stringMatch = queryValidator(searchText, search.name)
let intMatch = queryValidator(searchText, String(search.age))
filtered = (stringMatch != false || intMatch != false)
return (stringMatch != false || intMatch != false)
})
return filtered
}
func queryValidator(search : String, database : String) -> Bool
{
//Function that splits search query into multiple querys
let query = search.uppercaseString.componentsSeparatedByString(" ")
var queryFound = false
for(var i = 0; i < query.count; i++)
{
let match = query[i].uppercaseString.rangeOfString(database.uppercaseString)
if(match != nil)
{
queryFound = true
}
}
return queryFound
}
filterContentForSearchText("a")
任何帮助将非常感激!!
string.rangeOfString没有前缀匹配。因此,如果您使用“ a”进行搜索,则您的数组中没有名称为“ a”的任何人。如果要进行前缀匹配,请尝试使用String.hasPrefix(如https://developer.apple.com/library/mac/Documentation/General/Reference/SwiftStandardLibraryReference/index.html中所述)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句