Как реализовать поиск с использованием массива пользовательских объектов с помощью NSPredicate? - PullRequest
0 голосов
/ 04 мая 2018
private  var contactsWithSections = [[WPH]]()

WPH имеет следующие свойства:

class WPH: NSObject {
    var fName: String? = nil
    var lName: String? = nil
    var number: String? = nil
    var email: String? = nil
}

Я хочу искать по имени fName, т.е. в массиве есть fname = alex, fname = alena, fname = flora

let searchStr = "al"

Тогда результат должен вернуть объекты для alex и alena

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

Нашел более подходящее решение, которое идеально подходит для моей проблемы

let filtered = MasterList!.filter { (data) -> Bool in
            return data.fName?.range(of: Key, options: String.CompareOptions.caseInsensitive) != nil || data.lName?.range(of: Key, options: String.CompareOptions.caseInsensitive) != nil
        }
0 голосов
/ 04 мая 2018

Вы можете просто использовать плоскую карту, затем Filter

FlatMap объединит все разделы, фильтр отфильтрует его по вашему ключу

let results  =  contactsWithSections.flatMap {$0}.filter { (obj) -> Bool in
        guard let keyValue = obj.fName else  {return false}
        return keyValue == searchStr
    }
...