使用自定义字段从数组搜索Swift

时间:2018-11-13 11:16:21

标签: ios arrays swift search

我有一个数组

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
    searchArrayFiltered = searchText.isEmpty ? searchArray : searchArray.filter({(dataString: String) -> Bool in
        return dataString.(of: searchText, options: .caseInsensitive) != nil
    })

    tableView.reloadData()
}

我有一个用于从数组搜索并在表中显示结果的代码:

return dataString.String(of: searchText, options: .caseInsensitive) != nil

但是在searchArray行中,我有一个错误:

  

元组类型的值'(ean:字符串,名称:字符串,重量:字符串,   品牌:字符串,百分比:字符串,内部:字符串,img:字符串,数据包:   String,date:String)'没有成员'String'

如果我将dataString.String更改为dataString.name,则出现错误:

  

无法调用非函数类型'String'的值

请帮助我从{{1}}搜索“名称”

2 个答案:

答案 0 :(得分:3)

首先,不鼓励您使用元组作为数组类型。使用自定义结构或类

苹果说:

  

组对相关值的临时组很有用。它们不适合创建复杂的数据结构。如果您的数据结构可能会在临时范围之外持续存在,请将其建模为类或结构,而不是元组。


有两个主要问题:

  1. 复制粘贴错误,您是说dataString.range(of...
  2. dataString不是字符串,而是一个元组(类型注释是多余的)

将功能更改为

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
    searchArrayFiltered = searchText.isEmpty ? searchArray : searchArray.filter({tuple -> Bool in
        return tuple.name.range(of: searchText, options: .caseInsensitive) != nil
    })

    tableView.reloadData()
}

答案 1 :(得分:0)

创建一个结构
struct Model {
    var ean: String
    var name: String
    var weight: String
    var brand: String
    var percent: String
    var inside: String
    var img: String
    var packet: String
    var date: String
}

然后在您的[Model]

上应用过滤器