2015-09-22 85 views
0

我試圖篩選我創建基於我查詢對象(字符串)的陣列。他們表現出色,現在我只想過濾並重新制作陣列,以便我可以過濾掉我需要的信息。我不知道爲什麼我在Xcode中獲得「調用結果」過濾器「未使用」。我環顧四周,但我無法弄清楚這一點。濾波器使用的數據的陣列中的一個UITableView

import UIKit 

class RegionStoreTableViewController: UITableViewController, UISearchBarDelegate { 

var selectedRegionStore : String? = nil 
var selectedRegionStoreIndex : Int? = nil 
var dataArray = [String]() 
var filteredArray = [String]() 
var employeeType : String? = nil 
var searchText = "" 

@IBOutlet weak var regionStoreSearchBar: UISearchBar! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    let prefs = NSUserDefaults.standardUserDefaults() 

    if prefs.valueForKey("EmployeeType") != nil { 

     employeeType = prefs.valueForKey("EmployeeType") as! String 

     // Employee Type 

     // Retail 
     if employeeType == "Retail" { 

      self.navigationItem.title = "Store Selector" 

      let query = PFQuery(className: "Stores") 
      query.orderByAscending("rStoreNumber") 
      query.findObjectsInBackgroundWithBlock({ (store: [AnyObject]?, error: NSError?) -> Void in 
       if error == nil { 
        for store in store! { 
         let theStore = store["storeName"] as! String 
         let storeNumber = store["rStoreNumber"] as! String 
         let storeString = storeNumber + " - " + theStore 
         print(theStore) 
         self.dataArray.append(storeString) 
         self.tableView.reloadData() 
        } 
       } 
      }) 



     } 

     if employeeType == "Corporate" { 
      let query = PFQuery(className: "Regions") 
      query.orderByAscending("regionName") 
      query.findObjectsInBackgroundWithBlock { (region: [AnyObject]?, error: NSError?) -> Void in 
       if error == nil { 
        for region in region! { 
         let theRegion = region["regionName"] as! String 
         print(theRegion) 
         self.dataArray.append(theRegion) 
         self.tableView.reloadData() 
        } 
       } else { 
        print(error) 
       } 
      } 
     } 
    } 
} 




override func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
    return 1 
} 

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    print(dataArray.count) 
    return dataArray.count 

} 

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    let cell = tableView.dequeueReusableCellWithIdentifier("RegionStoreCell", forIndexPath: indexPath) 

    if searchText.isEmpty { 
     cell.textLabel?.text = dataArray[indexPath.row] 
    } 

    if searchText != "" { 
     dataArray.filter() {nil != $0.containsString(searchText) } 
    } 

    if indexPath.row == selectedRegionStoreIndex { 
     cell.accessoryType = .Checkmark 
    } else { 
     cell.accessoryType = .None 
    } 
    return cell as UITableViewCell 
} 

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    tableView.deselectRowAtIndexPath(indexPath, animated: true) 

    if let index = selectedRegionStoreIndex { 
     let cell = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: index, inSection: 0)) 
     cell?.accessoryType = .None 
    } 

    selectedRegionStoreIndex = indexPath.row 
    selectedRegionStore = dataArray[indexPath.row] 

    let cell = tableView.cellForRowAtIndexPath(indexPath) 
    cell?.accessoryType = .Checkmark 

} 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "SaveSelectedRegionStore" { 
     let cell = sender as! UITableViewCell 
     let indexPath = tableView.indexPathForCell(cell) 
     selectedRegionStoreIndex = indexPath?.row 
     if let index = selectedRegionStoreIndex { 
      selectedRegionStore = dataArray[index] 
     } 
    } 
} 

// MARK: Search Bar 
// delegate in story board 
func searchBarTextDidBeginEditing(searchBar: UISearchBar) { 
    searchBar.showsCancelButton = true 
} 

func searchBarTextDidEndEditing(searchBar: UISearchBar) { 
    searchBar.showsCancelButton = false 
} 

func searchBarSearchButtonClicked(searchBar: UISearchBar) { 
    // add minimum length of search 
    searchText = searchBar.text! 
    self.tableView.reloadData() 
} 

func searchBarCancelButtonClicked(searchBar: UISearchBar) { 
    // clear out search box 
    searchBar.text = nil 
    // clear out search variable 
    searchText = "" 
    // reload the table 
    self.tableView.reloadData() 
    // hide keyboard 
    searchBar.resignFirstResponder() 
} 


} 

有什麼建議嗎?

+1

TL; DR。把它切成相關的位。 – trojanfoe

回答

1

我想你需要將你的過濾數組存儲到另一個數組中。

let filterArray = dataArray.filter() {nil != $0.containsString(searchText)