логическое значение возвращает помощь в поиске исправления

#ios #swift #return #boolean #new-operator

#iOS #swift #Возврат #логический #new-operator

Вопрос:

у меня простая проблема, я хочу вернуть этот:

 let results = prices.filter{
            if($0.MultipleSearchString != nil){
                predicate.evaluate(with: ($0.MultipleSearchString?.lowercased())!)
            }else {
                self.loadPricesFromDb()
            }
        }
  

но у меня есть проблема с этим, потому что это создает проблему, подобную:
Отсутствующий возврат в закрытии, который, как ожидается, вернет ‘Bool’, и я не знаю, почему
Кто-нибудь может мне это объяснить?

Комментарии:

1. фильтр ожидает, что вы вернете логическое значение для каждого сравнения. например prices.filter { $0 > 50.0 } (на основе цен, которые [Double] . трудно дать вам точный ответ без дополнительной информации / контекста о том, что вы делаете, и какие цены на самом деле содержат

2. Неправильное использование. Вы должны это проверить: developer.apple.com/documentation/swift/string/2893557-filter

Ответ №1:

Вы неправильно используете функцию фильтра.

Фильтр со встроенным замыканием оценит каждый элемент массива с логикой в предоставленном замыкании и вернет массив элементов, которые удовлетворяют этой логике, например:

 let results = prices.filter {
    $0.MultipleSearchString != nil
}
  

Вышеуказанные результаты будут со всеми элементами, которые MultipleSearchString отличаются от nil.

Также плохо вызывать функцию, которая предположительно загружает данные из базы данных, поскольку она будет срабатывать (почти) на каждой итерации.

Вам необходимо провести рефакторинг вашего кода, чтобы лучше работать с предполагаемым решением.