这种类型叫什么(斯威夫特)? var something = [(item1:String,item2:Float,item3:[String])]()

时间:2017-02-11 23:27:39

标签: arrays swift uitableview filtering

我一直在使用这种类型的元素一段时间来填充tableviews中每个单元格中的一堆数据。谁能告诉我这个数据类型叫什么? Items = [(category:String, items: [String], price: [Float])]()

我也遇到了解包和过滤此元素内容的一些问题。当我打印Items时,它会返回如下内容:[("Beef", ["Steak", "Deep fried beef"], [5.98999977, 4.98999977]), ("Chicken", ["Roast chicken"], [4.98999977])]

问题是我无法访问items内的Items数组。

我可以使用此命令根据类别轻松过滤tableview的内容:

func filteredContentForSearchText(_ searchText: String, scope: String = "ALL") {
    Items2 = Items.filter { (element:(category: String, items: [String], price: [Float])) -> Bool in

        return element.category.lowercased().contains(searchText.lowercased())
    }
    tableView.reloadData()
}

但是当我想过滤下面的内容时,我收到此错误Value of type '[String]' has no member 'lowercased'

func filteredContentForSearchText(_ searchText: String, scope: String = "ALL") {
        items = items2.filter { (element:(category: String, items: [String], price: [Float])) -> Bool in

            return element.items.lowercased().contains(searchText.lowercased())
        }
        tableView.reloadData()
    }

如何解开items数组中的字符串?提前谢谢。

1 个答案:

答案 0 :(得分:3)

你的第一个问题的答案是它有点奇怪的数据类型,但它是Array Tuple由3个元素组成:String({ {1}}),categoryArray<String>)和itemsArray<Float>)。

访问元组的单个元素与常规数组相同。例如price。这将为您提供Items2[0],您可以单独访问元组成员。这可以匿名(itemitem.0item.1)或通过命名元素(item.2item.categoryitem.items)完成。

如果您访问item.priceitem.items),则会有item.1。由于它是一个字符串数组,因此没有Array<String>。您可以访问此数组中的单个字符串并lowercased或将所有字符串连接成一个字符串并lowercase