Тройная развертка в Свифте
В скором времени я использую этот код:
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)