2017-01-21 9 views
-3

Невозможно отфильтровать массив словарей, используя предикат здесь мой код, и я хотел бы, чтобы фильтровать массив словарей, имеющих ключ «категории»Swift 3 filterWithPredicate не работает

let searchText = searchTF.text?.replacingOccurrences(of: " ", with: "") 
    if (searchText?.characters.count)!>0 { 
    let pred = NSPredicate(format: "SELF beginswith[c] %@", searchTF.text!) 
    let array = NSMutableArray() 
array.insert(dataArray as [AnyObject], at:NSIndexSet(indexesIn: NSMakeRange(0, dataArray.count)) as IndexSet) 
    dataArray.removeAllObjects() 
    getedArray = NSMutableArray(array: array.filtered(using: pred)) 
    dataArray = getedArray.sortedArray(using: #selector(localizedCaseInsensitiveCompare(_ :))) 
      } 

его дает ошибку в последней строке т.е.

getedArray = NSMutableArray (массив: array.filtered (с использованием: PRED)) NSArray) .sortedArrayUsingSelector (#selector (self.localizedCaseInsensitiveCompare))

его дает ошибку в последней строке Использование неразрешенного идентификатора 'localizedCaseInsensitiveCompare'

+1

* Невозможно * каким образом? Ошибка, ошибка компиляции, непредвиденное поведение? – luk2302

+0

@MaheshNarla Вам нужно добавить, что ошибка –

+0

не может назначить значение типа 'Void' (aka '()') для ввода 'NSMutableArray' –

ответ

0

я достигла этого

let searchText = searchTF.text?.replacingOccurrences(of: " ", with: "") 

    if (searchText?.characters.count)!>0 { 
     // Put your key in predicate that is "category" 
     let searchPredicate = NSPredicate(format: "category CONTAINS[C] %@", searchText!) 
     let array = (dataArray as NSMutableArray).filtered(using: searchPredicate) 
     print ("array = \(array)") 
     if(array.count == 0){ 
      searchTFActive = false; 
     } else { 
      searchTFActive = true; 
     } 
     self.aTable.reloadData() 

    } 
+0

Вы тут путаете, в своем вопросе с фильтром вы используете 'beginwith', теперь у вас есть ответ на сообщение с' CONTAINS', вам нужно действительно отредактировать свой вопрос и дать все детали и результаты, которые вы хотите, это не правильный способ задать вопрос. –

+0

И, пожалуйста, скажите мне, где этот вид идет, что вы постоянно спрашиваете в комментариях к моим ответам? –

+0

Я не это, я просто говорю, что в следующий раз, когда вы зададите вопрос, пожалуйста, добавьте все требуемые детали, которые вы хотите, включая нужный вам результат. –

1

Попробуйте это собственное решение Swift. filteredArray будет содержать отфильтрованный и отсортированный массив.

guard let searchText = searchTF.text, !searchText.isEmpty else { return } 
let trimmedSearchText = searchText.replacingOccurrences(of: " ", with: "").lowercased() 
let filteredArray = dataArray.filter({($0["category"] as! String).lowercased().hasPrefix(trimmedSearchText) }) 
          .sorted { ($0["category"] as! String).lowercased() < ($1["category"] as! String).lowercased() } 

код предполагает, что всегда есть значение для ключа category. Подумайте, использовать пользовательскую структуру или класс, чтобы избежать приведения к String.

+0

этот ответ хорош, но dataArray - это arrayOfDictiuonaries, и я хотел бы отфильтровать этот массив с ключом «категория», не могли бы вы обновить свой ответ? –

+0

Я обновил ответ. – vadian

+0

чувствительный к этому регистру?/ –

Смежные вопросы