2017-02-11 77 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

相關問題