Проверьте, пуст ли необязательный массив в Swift - PullRequest
0 голосов
/ 16 июня 2020

Я понимаю, что есть масса вопросов по SO с ответами по этому поводу, но по какой-то причине я не могу заставить их работать. Все, что я хочу сделать, это проверить, есть ли в массиве хотя бы один член. По какой-то причине Apple усложнила это в Swift, в отличие от Objective- C, где вы только что протестировали if count>=1. Код вылетает, когда массив пуст.

Вот мой код:

let quotearray = myquotations?.quotations

if (quotearray?.isEmpty == false) {

let item = quotearray[ Int(arc4random_uniform( UInt32(quotearray.count))) ] //ERROR HERE

}

Однако я получаю сообщение об ошибке:

Value of optional type '[myChatVC.Quotation]?' must be unwrapped to refer to member 'subscript' of wrapped base type '[myChatVC.Quotation]'.

Ни один из вариантов fix-it для связывания или принудительного развертывания не решает ошибку. Я также пробовал:

if array != nil && array!. count > 0  and if let thearray = quotearray 

, но ни один из них не будет работать

Спасибо за любые предложения.

Ответы [ 3 ]

2 голосов
/ 16 июня 2020

randomElement уже существует, поэтому не изобретайте велосипед:

var pepBoys: [String]? = ["manny", "moe", "jack"]
// ... imagine pepBoys might get set to nil or an empty array here ...
if let randomPepBoy = pepBoys?.randomElement() {
    print(randomPepBoy)
}

if let завершится ошибкой, если pepBoys равно nil или пусто.

0 голосов
/ 16 июня 2020

Я бы рекомендовал использовать оператор защиты

guard let array = optionalArray,! Array.isEmpty else {return} ...

0 голосов
/ 16 июня 2020

Вы можете развернуть необязательный массив и использовать его вот так, также используйте новый синтаксис Int.random(in:) для генерации случайных Int s:

if let unwrappedArray = quotearray,
    !unwrappedArray.isEmpty {
    let item = unwrappedArray[Int.random(in: 0..<unwrappedArray.count)]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...