要搜索包含在我使用的结构中的字符串,请执行以下操作:

let results = myArray.filter( {$0.model.localizedCaseInsensitiveContains("bu")} )

但是假设这个结构有几个我想搜索的属性,或者我想一次搜索所有的属性。我只能过滤原始类型,所以不使用“model”是行不通的。
解决方案-------------------------
虽然我真的很喜欢下面Matt建议的使用键路径的想法,但最后我在结构中添加了一个函数,这使得我的视图控制器代码更加清晰:
struct QuoteItem {

    var itemIdentifier: UUID
    var quoteNumber: String
    var customerName: String
    var address1: String

    func quoteItemContains(_ searchString: String) -> Bool {
        if self.address1.localizedCaseInsensitiveContains(searchString) ||
        self.customerName.localizedCaseInsensitiveContains(searchString) ||
        self.quoteNumber.localizedCaseInsensitiveContains(searchString)
        {
            return true
        }
        return false
    }

然后,在我的控制器中,quotes是一个QuoteItem数组,我可以通过简单地编写:
searchQuoteArray = quotes.filter({ $0.quoteItemContains(searchString) })

最佳答案

这听起来像是一个快速关键路径的工作。只需为要搜索的字符串属性提供关键路径。

struct MyStruct {
    let manny = "Hi"
    let moe = "Hey"
    let jack = "Howdy"
}

let paths = [\MyStruct.manny, \MyStruct.moe, \MyStruct.jack]
let s = MyStruct()
let target = "y"
let results = paths.map { s[keyPath:$0].localizedCaseInsensitiveContains(target) }
// [false, true, true]

07-24 09:46
查看更多