简体   繁体   English

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

[英]Search from Array with custom fields Swift

I have an arrays 我有一个数组

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

I have a code for search from arrays and show result in table: 我有一个从数组搜索并在表中显示结果的代码:

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

But in line return dataString.String(of: searchText, options: .caseInsensitive) != nil i have an error: 但是在行中return dataString.String(of: searchText, options: .caseInsensitive) != nil我有一个错误:

Value of tuple type '(ean: String, name: String, weight: String, brand: String, percent: String, inside: String, img: String, packet: String, date: String)' has no member 'String' 元组类型'(ean:字符串,名称:字符串,重量:字符串,品牌:字符串,百分比:字符串,内部:字符串,img:字符串,数据包:字符串,日期:字符串)的值'没有成员'String'

If I change dataString.String to dataString.name, I have an error: 如果我将dataString.String更改为dataString.name,则会出现错误:

Cannot call value of non-function type 'String' 无法调用非函数类型'String'的值

Please help me to do search from searchArray for "name" . 请帮助我从searchArray搜索“ name”

First of all you are discouraged from using a tuple as array type. 首先,不鼓励您使用元组作为数组类型。 Use a custom struct or class 使用自定义结构或类

Apple says: 苹果说:

Tuples are useful for temporary groups of related values. 元组对于相关值的临时组很有用。 They're not suited to the creation of complex data structures. 它们不适合创建复杂的数据结构。 If your data structure is likely to persist beyond a temporary scope, model it as a class or structure, rather than as a tuple. 如果您的数据结构可能会在临时范围之外继续存在,则将其建模为类或结构,而不是元组。


There are two major issues: 有两个主要问题:

  1. Copy&Paste mistake, you mean dataString.range(of... 复制和粘贴错误,您的意思是dataString.range(of...
  2. dataString is not a string, it's a tuple (the type annotation is redundant) dataString不是字符串,而是一个元组(类型注释是多余的)

Change the function to 将功能更改为

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

create a struct for 为创建一个结构

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
}

then apply filter on your [Model] 然后在[Model]上应用过滤器

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM