Swift - 在整个结构中搜索字符串

标签 swift struct filter

要搜索结构中包含的字符串,我使用:

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

但是假设该结构有几个我想搜索的属性 - 或者我什至可能想一次搜索所有这些属性。我只能过滤原始类型,所以将“模型”排除在外是行不通的。

解决方案------------------------

虽然我真的很喜欢使用 Matt 在下面建议的关键路径的想法,但我最终向我的结构添加了一个函数,使我的 View Controller 代码更加清晰:

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
    }

然后,在我的 Controller 中,quotes 是一个 QuoteItem 数组,我可以通过简单地编写来搜索它:

searchQuoteArray = quotes.filter({ $0.quoteItemContains(searchString) })

最佳答案

这听起来像是 Swift key paths 的工作。只需提供要搜索的字符串属性的关键路径。

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]

关于Swift - 在整个结构中搜索字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51468782/

相关文章:

ios - 如何删除字符串中的所有空格和\n\r?

c - 无法构建 'queue-like' 结构 - 结构声明有问题吗?

c - C 中结构的意外行为

javascript - AngularJS:按正则表达式过滤

swift - 如何在Swift中为图像添加GPS位置

arrays - 解决这个完成 block

javascript - SAPUI5 删除聚合绑定(bind)中的重复项

javascript - 按半径大小过滤节点

ios - 如何在不使用 Storyboard的情况下创建新的 Swift 项目?

assembly - 在汇编中,你如何处理C结构体?