2016-12-10 10 views
1

Stringを格納データから検出する方法を知りたいと思います。すべてのデータはUUID().uuidStringで保存されます。 Stringのデータは、UITableViewtitle文字列に保存されます。Swift 3でデータをフィルタリングするために文字列内の文字列を検索する方法

たとえば、「Dog」ナビゲーションのタイトルを持つDogTableViewにいる場合、データは「Dog」になります。データは "Dog" + uuidです。そして、CatTableViewに移動して "Cat"という名前のナビゲーションにタイトルをつけたら、データは "Cat" + uuidになります。

ここでは、Dog + uuidとCat + uuidの2種類のデータがあります。

したがって、問題は、Dog + uuidデータのみをいくつかのアルゴリズムで抽出したいということです。私の試みは以下の通りです。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 

    if(segue.identifier == "animals"){ 

     let cell = sender as? UITableViewCell 
     let indexPath = tableView.indexPath(for: cell!) 

     let item:Animal 
     item = self.animals[indexPath!.row] 

     let dvc = segue.destination as! AnimalTableViewController 
     dvc.topTItle = item.name! 

     let singleton = AnimalManager.sharedInstance 
     //Animal data is saved with CoreData in AnimalTableViewController 
     let data = singleton.getAnimalData() 

     for d in data { 
      // This is not working.. 
      if (d.uuid?.contains(item.name!))! { 
       dvc.displayArray.append(d) 
      } 
     } 
     // I thought this would work by counting the item length 
     // Then using `Range` or something to detect the Dog or Cat. 
     // But I do not know how to do....at all 
     let length = item.name!.characters.count 
     for i in 0...length - 1 { 

     } 


    } 
} 

にはどうすれば適切に次のAnimaltableViewControllerにフィルタリングされたデータを、データをフィルタリングして表示することができていますか?

答えて

1

まず、なぜ天国のためにuuidnameが必要ですか?私は名前のない動物は知らない。 nilの値がuuidの場合、を表すuは一意のになります。

実際にはfilter関数を使用して、1行で項目をフィルタリングできます。

dvc.displayArray = data.filter { $0.uuid.hasPrefix("Dog") && $0.uuid.contains(item.name) } 

PS:Core Dataを扱っているので、Core Dataで直接データをフィルタする方がはるかに効率的です。

+0

こんにちは!私はこれを複雑な方法で考えていました。このフィルタ機能は素晴らしいです!また、私はCore Dataを使い始めましたので、私はそれについてよく知らないのです!私は後でAppleの文書でフィルタリングを直接使用する方法を調べます。 – Ryo

関連する問題