【问题标题】:Content filter function not working... Can't find bug内容过滤功能不起作用...找不到错误
【发布时间】:2014-10-27 22:10:05
【问题描述】:

我一直在用 Swift 的 XCode 6 Playground 中弄乱内容过滤系统,我的想法是,如果我输入一个包含多个单词的字符串(例如:“Apple Oranges Bananas”),该函数会将这个字符串分成一个然后使用这些单词中的任何一个在数据库中循环,如果匹配,则应返回 true。所以如果我输入一个完整的单词,我的函数返回真,但当我输入一个字母时返回假......我使用了“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")

任何帮助将不胜感激!

【问题讨论】:

    标签: swift xcode filter


    【解决方案1】:

    string.rangeOfString 不进行前缀匹配。因此,如果您使用“a”进行搜索,则您的数组中没有任何名称为“a”的人。如果要进行前缀匹配,请尝试使用 String.hasPrefix(如https://developer.apple.com/library/mac/Documentation/General/Reference/SwiftStandardLibraryReference/index.html 中所述)。

    【讨论】:

    • 谢谢!我改用了 hasPrefix 方法,它可以很好地满足我的需要。 :)
    猜你喜欢
    • 2022-01-17
    • 2013-11-02
    • 1970-01-01
    • 2012-11-08
    • 1970-01-01
    • 2021-04-10
    • 1970-01-01
    • 2021-12-17
    • 2021-05-05
    相关资源
    最近更新 更多