Фильтрация многомерного массива в uitableview - swift - PullRequest
0 голосов
/ 14 июля 2020

Вот моя модель

class BusinessProfile: NSObject {
    var title: String?
    var website: String?
    var associatedOrganization: String?
    var companyName: String?
    
    var productList: [BusinessProfileProduct]?
}

class BusinessProfileProduct: NSObject{    
    var productName: Double?
    var modelNumber: String?
    var hsCode: String?
}

Вот мои переменные массива в контроллере представления.

var businessProfileArray = [BusinessProfile]()
var tempBusinessProfileArray = [BusinessProfile]()

Я уже отфильтровал businessProfileArray на основе companyName, как показано ниже:

tempBusinessProfileArray = businessProfileArray.filter({ (BusinessProfile) -> Bool in
            return (BusinessProfile.companyName!.lowercased().contains(searchText.lowercased()))
        })

Но я не могу отфильтровать businessProfileArray на основе productName или hsCode из вложенного массива BusinessProfileProduct.

Примечание: businessProfileArray содержит массив businessProfileProduct

Любая помощь ни от кого? Заранее спасибо.

1 Ответ

1 голос
/ 14 июля 2020

Вы можете сделать что-то похожее на это

func filterArr(searchText:String) -> [BusinessProfile] {
    var filteredArr = [BusinessProfile]()
    for profile in businessProfileArray {
        var isMatched = false
        
        if let matchedProduct = profile.productList.filter ({$0.companyName.lowercased().contains(searchText.lowercased())}).first {
            isMatched = true
            print(matchedProduct.companyName)
        }
        
        if isMatched {
            filteredArr.append(profile)
        }
        
    }
    
    return filteredArr
}

, это вернет все профили, в которых есть совпадение searchText с названием компании продукта, но не удалит лишние продукты, которые не соответствуют searchText

...