首页 > 解决方案 > 使用自定义字段 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:String,name:String,weight:String,brand:String,percent:String,inside:String,img:String,packet:String,date:String)'的值没有成员'String'

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

无法调用非函数类型“字符串”的值

请帮我搜索searchArray" name"

标签: iosarraysswiftsearch

解决方案


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

苹果 说:

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


有两个主要问题:

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

推荐阅读