Если вы используете регулярные Swift массивы, которые я думаю, это правильная идея, так как вы используете Swift, вам может заставить его работать, если вы измените тип переменной массива и исправьте синтаксис фильтрации массива. Во-первых, изменить объявление массива на это:
var BusinessNamesArray:[String]?
filter
ваша функция используется на ваших self.BusinessNamesArray
возвращает отфильтрованный массив, а не фильтрации массива на месте (что кажется, что вы хотите). Если вы хотите заменить содержание вашего self.BusinessNamesArray
, вам нужно будет сделать что-то вроде этого:
func updateSearchResultsForSearchController(searchController: UISearchController) {
self.BusinessNamesArray = self.BusinessNamesArray.filter { (business:String) -> Bool in
return true
// You probably want to compare strings here like this instead:
// guard let searchText = searchController.searchBar.text else {
// return false
// }
// return business.hasPrefix(searchText)
}
// You probably also need to reload your table view at this point:
self.tableView.reloadData()
}
Имейте в виду, что хотя ваш BusinessNamesArray
теперь отфильтрована, и вы не можете не-фильтр он. Вместо этого вы должны, вероятно, сохранить второй массив своих строк, называемый как-то вроде searchResults
. Затем вы можете использовать это для фильтрации и сохранения исходного списка бизнес-имен в исходном массиве. Таким образом, вы бы добавили переменную класса с именем var searchResults:[String]?
, и код фильтрации поиска изменился бы.
func updateSearchResultsForSearchController(searchController: UISearchController) {
self.searchResults = self.BusinessNamesArray.filter { (business:String) -> Bool in
guard let searchText = searchController.searchBar.text else {
return false
}
return business.hasPrefix(searchText)
}
self.tableView.reloadData()
}
При вызове reloadData
на вашем табличном на данный момент, вы, вероятно, хотите, чтобы проверить и посмотреть, если ваш контроллер поиска активен в numberOfSectionsInTableView
, а также другие функции делегата вид таблицы делегата и использовать searchResults
массив, если он активен и BusinessNamesArray
, если его нет - что-то вроде:.
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
if (self.resultSearchController.active) {
return self.searchResults.count ?? 0
} else {
return self.BusinessNamesArray.count ?? 0
}
}
(переменная self.resultSearchController
является локальным экземпляром UISearchController
я не уверен, что вы назвали ваши.)
Вы затем использовать подобный код, чтобы решить, какие элементы, чтобы захватить для prepareForSegue:
код:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
// Guard your variables here so you can return early if they're
// not valid
guard let upcoming = segue.destinationViewController as? DetailsViewController,
myindexpath = self.tableView.indexPathForSelectedRow else {
return
}
var titleString = ""
if (self.resultSearchController.active) {
if let searchResults = self.searchResults {
titleString = searchResults[myindexpath.row]
}
} else {
if let businessNames = self.BusinessNamesArray {
titleString = businessNames[myindexpath.row]
}
}
upcoming.titleString = titleString
self.deselectRowAtIndexPath(myindexpath, animated: true)
}
Я сделал это: ** 1) ** преобразования NSMutableArray в NSArray 'вар BusinessNamesArray = [строка ]() '** 2) ** Затем, используя это:' var BusinessNamesArrayAfterConverting = self.BusinessNamesArray как NSArray as! [String] 'в функции' prepareForSegue'. Но когда я пытаюсь использовать его, он дает мне эту ошибку: _Вод типа «UITableViewController» не имеет члена «BusinessNamesArrayAfterConverting» – Sara
Я не следую вашему шагу 1), создав новый NSArray, называемый BusinessNmesArray? вы пытаетесь сделать это var BusinessNamesArrayAfterConverting = [String]() BusinessNamesArrayAfterConverting = self.BusinessNamesArray как NSArray as! [String] – ray
, прежде чем я спрошу 'BusinessNamseArray', был NSMutableArray, но после вашего ответа я удаляю его и делаю то, что я написал в предыдущем комментарии. Я не знаю, вот что я получил. Можете ли вы сказать мне, что вы предлагаете мне делать с подробностями?, Пожалуйста. – Sara