Swift How To — Сначала оператор / Where проверяет массив необязательных объектов — разворачивает и сопоставляет

#swift

#swift

Вопрос:

У меня есть массив объектов, которые все принадлежат классу PFObject . У меня есть подкласс PFObject called GameCategory , в котором находятся некоторые из PFObject s в моем массиве GameCategory .

Мне было интересно, как написать инструкцию first / where, которая проверяла бы каждый объект на предмет того, относится ли он к классу GameCategory, а затем проверяла соответствующий идентификатор.

Вот моя нерабочая попытка сделать это:

 for id in Ids {
    if let object = self.matchObjects.first(where: {
        if let gameCategory = $0 as? GameCategory {
            gameCategory.id == id
        }
    }) {
        //object successfully cast as GameCategory, and the GameCategory id was a match            
    }
}
 

Этот код возвращает ошибку ‘Отсутствует возврат в замыкании, которое, как ожидается, вернет ‘Bool’.

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

1. where Закрытие должно возвращать Bool значение, о чем ясно говорится в ошибке. Чего вы собираетесь достичь? На данный момент кажется, что id первый найденный GameCategory экземпляр перезаписывается на каждой итерации цикла.

Ответ №1:

В вашем коде отсутствует возврат в этом first(where: замыкании и приведении как GameCategory (ваше приведение существует только в области этого замыкания). Я написал его немного по-другому, но он достигнет того же самого:

 for id in Ids {
    if let object = self.matchObjects.first(where: { ($0 as? GameCategory)?.id == id }) as? GameCategory {
        //object cast as GameCategory and the id was a match
    }
}
 

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

1. Спасибо! Я знал, что это должна быть какая-то проблема с синтаксисом.