Тройная развертка в Свифте

В скором времени я использую этот код:

var categories: Results<Category>? //Realm dataType

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    if let categories = categories, !categories.isEmpty {
        return categories.count
    } else {
        return 1
    }
}

Сейчас я пытаюсь структурировать код для моего tableView как троичный оператор, но не знаю, как это сделать. Я нашел следующую страницу: https://dev.to/danielinoa_/ternary-unwrapping-in-swift-903 но мне все еще неясно.

То, что я попробовал, это:

return categories?.isEmpty ?? {($0).count} | 1

или же

let result = categories?.isEmpty ?? {($0).count} | 1
return result

но оба дают ошибки. Любая идея, как я могу решить это?

3 ответа

Решение

Вместо троичного вы могли бы использовать Optional.map чтобы сделать это еще проще:

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return categories.map { $0.count } ?? 1
}

Или смешивание Optional.map и троичный, чтобы достичь того, что вы, я думаю, пытаетесь достичь

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return categories.map { !$0.isEmpty ? $0.count : 1 } ?? 1
}

Вернуть 1 для нулевого и пустого массива, в противном случае значение count

return (categories?.count ?? 1) + (categories?.isEmpty ?? false ? 1 : 0)
return categories?.count != 0 ? {($0).count} : 1
Другие вопросы по тегам