我在一个返回total / count
的类中有一个属性。 total
和count
都是可选项。是否有一种更优雅的方式来检查它们是否具有这个值:
var equalAmount: Float? {
if total != nil, count != nil {
return total! / Float(count!)
} else {
return nil
}
}
答案 0 :(得分:4)
几乎任何方式都比使用force-unwrap更优雅。请选择:
if let
:最接近您当前的设计
if let total = total, let count = count {
return total / Float(count)
} else {
return nil
}
guard let
:减少缩进
guard let total = total, let count = count else { return nil }
return total / Float(count)
或map
和flatMap
:适用于单行
return total.flatMap { total in count.map { total / Float($0) } }
答案 1 :(得分:2)
ñ
这将是我的方法。当你真的需要变量来继续这个功能时,我会使用guard let。
答案 2 :(得分:0)
如果保护中的条件不为真,则使用guard
let
解包值,然后else部分将返回到该函数,这将不执行其中的另一个。与guard
语句相比,if let
更优选检查解包值并立即返回:
var equalAmount: Float? {
guard let newTotal = total else {
return nil
}
guard let newCount = count else {
return nil
}
return newTotal/newCount
}
答案 3 :(得分:0)
使用三元条件运算符:
var equalAmount: Float? {
return total != nil && count != nil ? total! / Float(count!) : nil
}