2017-02-11 50 views
0

我一直在使用这种类型的元素来填充tableview中每个单元格中的一堆数据。任何人都可以告诉我这个数据类型被称为什么? Items = [(category:String, items: [String], price: [Float])]()这是什么类型(Swift)? var something = [(item1:String,item2:Float,item3:[String])]()

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

的问题是,我不能访问内部Itemsitems阵列。

我可以很容易地过滤的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

'[String]'表示一个'String'对象的数组。所以你不能在它上面做'lowercased()'。在它们的每一个上,是,但不在它的数组上。 – Larme

回答

3

答案第一个问题是,它是一个比特的奇数数据类型的,但它是TupleArray一个s由3个部分组成:一个Stringcategory),一个Array<String>items)和Array<Float>price)。

访问元组的单个元素与常规数组相同。例如Items2[0]。这会给你一个item,你可以单独访问元组成员。这可以通过匿名方式(item.0,item.1item.2)或通过命名元素(item.category,item.itemsitem.price)完成。

如果您访问item.itemsitem.1),您有一个Array<String>。由于它是一串字符串,因此没有lowercased。你可以访问这个数组中的一个单独的字符串,或者将它加入到一个字符串中,或​​者将所有的字符串连接在一起,即lowercase

相关问题