我一直在使用这种类型的元素一段时间来填充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
数组中的字符串?提前谢谢。
答案 0 :(得分:3)
你的第一个问题的答案是它有点奇怪的数据类型,但它是Array
Tuple
由3个元素组成:String
({ {1}}),category
(Array<String>
)和items
(Array<Float>
)。
访问元组的单个元素与常规数组相同。例如price
。这将为您提供Items2[0]
,您可以单独访问元组成员。这可以匿名(item
,item.0
和item.1
)或通过命名元素(item.2
,item.category
和item.items
)完成。
如果您访问item.price
(item.items
),则会有item.1
。由于它是一个字符串数组,因此没有Array<String>
。您可以访问此数组中的单个字符串并lowercased
或将所有字符串连接成一个字符串并lowercase
。