以下方法使用两个变量计算百分比。
func casePercentage() {
let percentage = Int(Double(cases) / Double(calls) * 100)
percentageLabel.stringValue = String(percentage) + "%"
}
上述方法运行良好,除非case = 1且calls = 0。 这会产生致命错误:浮点值无法转换为Int,因为它是无限的或NaN
所以我创建了这个解决方法:
func casePercentage() {
if calls != 0 {
let percentage = Int(Double(cases) / Double(calls) * 100)
percentageLabel.stringValue = String(percentage) + "%"
} else {
percentageLabel.stringValue = "0%"
}
}
这不会出错,但在其他语言中,您可以使用.isNaN()方法检查变量。这在Swift2中如何工作?
答案 0 :(得分:0)
您可以使用!
运算符“强行打开”可选类型:
calls! //asserts that calls is NOT nil and gives a non-optional type
但是,如果 nil
,这将导致运行时错误。
防止使用nil
或0的一个选项是执行您已完成的操作并检查它是否为0.
第二个选项是nil
- 检查
if calls != nil
第三个(和大多数Swift-y)选项是使用if let
结构:
if let nonNilCalls = calls {
//...
}
如果if
为calls
,则nil
块的内部将无法运行。
请注意,nil
- 检查和if let
将 NOT 保护您免于除以0.您必须单独检查。
结合第二个和你的方法:
//calls can neither be nil nor <= 0
if calls != nil && calls > 0