从带有自定义字段Swift的数组中搜索



我有一个数组

var searchArray = [(
ean: String,
name: String,
weight: String,
brand: String,
percent: String,
inside: String,
img: String,
packet: String,
date: String)
]()
var searchArrayFiltered = [(
ean: String,
name: String,
weight: String,
brand: String,
percent: String,
inside: String,
img: String,
packet: String,
date: String)
]()

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

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行中,我有一个错误:

元组类型的值'(ean:字符串,name:字符串,weight:字符串,brand:String,percent:String,内部:String,img:字符串,数据包:String,date:String('没有成员'String'

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

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

请帮助我从searchArray搜索"name">

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

苹果表示:

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


有两个主要问题:

  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()
}

为创建一个结构

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]上应用过滤器

最新更新