swift 中的三元展开
Ternary Unwrapping in swift
在 swift 中,我正在使用此代码:
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 ?? {([=12=]).count} | 1
或
let result = categories?.isEmpty ?? {([=13=]).count} | 1
return result
但都给出错误。知道我该如何解决这个问题吗?
您可以使用 Optional.map
而不是三元来使其更简单:
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return categories.map { [=10=].count } ?? 1
}
或混合 Optional.map
和三元来实现我认为正在努力实现的目标:
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return categories.map { ![=11=].isEmpty ? [=11=].count : 1 } ?? 1
}
Return 1 为 nil 和空数组,否则 count
的值
return (categories?.count ?? 1) + (categories?.isEmpty ?? false ? 1 : 0)
在 swift 中,我正在使用此代码:
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 ?? {([=12=]).count} | 1
或
let result = categories?.isEmpty ?? {([=13=]).count} | 1
return result
但都给出错误。知道我该如何解决这个问题吗?
您可以使用 Optional.map
而不是三元来使其更简单:
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return categories.map { [=10=].count } ?? 1
}
或混合 Optional.map
和三元来实现我认为正在努力实现的目标:
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return categories.map { ![=11=].isEmpty ? [=11=].count : 1 } ?? 1
}
Return 1 为 nil 和空数组,否则 count
return (categories?.count ?? 1) + (categories?.isEmpty ?? false ? 1 : 0)