Путаница с понижением значения в Swift - PullRequest
0 голосов
/ 04 августа 2020

У меня два массива.

var searchedArray: NSMutableArray!
var libraryArray: NSMutableArray!

Я пытаюсь исправить свою функциональность searchBar, потому что она всегда показывает nil (searchledArray = nil). Я пытался по-разному принизить его, но это не сработало. Вот фрагмент.

let laMutableCopy = (downloadManager.libraryArray as NSArray).mutableCopy()
        searchedArray = laMutableCopy.filter{
            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: searchText, options: [caseInsensitive, .anchored]) != nil
            } as? NSMutableArray

1 Ответ

0 голосов
/ 04 августа 2020

Вот пример, который будет работать:

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()
...