2017-08-09 3 views
0

TableView内に検索バーを作成しようとしています。私はUIに検索バーを得ることができましたが、私は検索機能のロジックに苦労しています。私はチュートリアルに従っていますが、まだコードにエラーがあります。検索バーの作成時にエラーが発生しました:条件バインディングの初期化ツールに 'String'ではなくOptionタイプが必要です

すべてのデータがjsonファイルで正しく読み込まれています。

'filterContent(for:)'関数でエラーが発生しました。エラーは、「条件付きバインディングの初期化子には「文字列」ではなくオプションの型が必要です」というメッセージが表示されます。

ここに、私のTableViewクラス内の関連コードがあります。 (エラーのある行にコメントが書き込まれていることに注意してください)。

import UIKit 

class LocationTableViewController: UITableViewController, UISearchResultsUpdating { 

    var locations = [Location]() 

    var searchController:UISearchController! 
    var searchResults = [Location]() 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     searchController = UISearchController(searchResultsController: nil) 
     tableView.tableHeaderView = searchController.searchBar 

     searchController.searchResultsUpdater = self 
     searchController.dimsBackgroundDuringPresentation = false 

    } 

    func filterContent(for searchText: String) { 

     searchResults = locations.filter({ (location) -> Bool in 
      // The following line receives the error 
      if let name = location.name { 
       let isMatch = name.localizedCaseInsensitiveContains(searchText) 
       return isMatch 

      } 

      return false 

      }) 

    } 


    func updateSearchResults(for searchController: UISearchController) { 
     if let searchText = searchController.searchBar.text { 
      filterContent(for: searchText) 
      tableView.reloadData() 
     } 
    } 

答えて

0

これはことを意味します

location.name 

はオプションではありませんが、あなたは(聞かせて)条件付きの構文を使用しています。 これはオプションのみで動作し、location.nameはオプションではありません。

あなたはこの変更した場合:これに

if let name = location.name { 
      let isMatch = name.localizedCaseInsensitiveContains(searchText) 
      return isMatch 
     } 
     return false 

 let name = location.name 
     let isMatch = name.localizedCaseInsensitiveContains(searchText) 
     return isMatch 

をそれが適切にコンパイルします。 "返品偽"の必要はありません

+0

あなたの答えをありがとう。私はすでにこれを試みたと述べたはずです。しかし、アプリケーションをビルドすると、アプリケーションを開くときにクラッシュします。ログには「致命的なエラー:オプション値をアンラッピングしている間に予期せずnilが見つかりました」と表示されます。 – joshlorschy

関連する問題