2017-02-11 7 views
0

私はこのタイプの要素を使ってしばらくの間、テーブルビューの各セルに多数のデータを設定しています。誰でもこのデータ型と呼ばれるものを教えてもらえますか? Items = [(category:String, items: [String], price: [Float])]()(Swift)と呼ばれるこのタイプは何ですか?

この要素の内容をアンラッピングしてフィルタリングする際にいくつかの問題が発生しています。 [("Beef", ["Steak", "Deep fried beef"], [5.98999977, 4.98999977]), ("Chicken", ["Roast chicken"], [4.98999977])]

Itemsの配列にアクセスできないという問題があります。

私は簡単にこのコマンドを使用して、カテゴリに基づいてテーブルビューのコンテンツをフィルタリングすることができます

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

最初の質問への答えは、それが奇数のデータ・タイプのビットであることであり、それは3つの要素からなるArrayTupleのSである:Stringcategory)、Array<String>items)、及びArray<Float>price)。

タプルの1つの要素にアクセスするには、通常の配列と同じです。例えばItems2[0]。これにより、個別にタプルメンバーにアクセスできるitemが得られます。これは匿名で行うことができます(item.0item.1、およびitem.2)または名前付き要素(item.category,item.items、およびitem.price)で行うことができます。

item.itemsitem.1)にアクセスすると、Array<String>となります。文字列の配列なので、lowercasedはありません。この配列内の個々の文字列とlowercaseにアクセスしたり、すべての文字列を1つの文字列にまとめてlowercaseとすることができます。

関連する問題