Вот пример, который будет работать:
var libraryArray = [
["title": "foo"],
["title": "bar"]
]
var filteredArray = libraryArray.filter{
// your production code doesn't have to be like this, but when attempting to debug
// its very helpful to break each cast out into its own assign to see where you
// are failing
guard let dict = $0 as? Dictionary<String, Any> else { return false }
guard let title = dict["title"] as? String else { return false }
return title.range(of: "fo", options: [.caseInsensitive, .anchored]) != nil
} as? Array<Dictionary<String, Any>>
Проблема с вашим кодом в том, что вы приводите результат filter
(быстрый Array
) к NSMutableArray
. Массивы Swift могут быть преобразованы в NSArray
, но их нельзя преобразовать в NSMutableArray
без создания копии, например:
(libraryArray as NSArray).mutableCopy()