2015-11-04 73 views
1

以下方法使用兩個變量計算百分比。浮點值不能被轉換爲Int因爲它或者無限或NaN如何檢查Swift 2中的非數字(NaN)

func casePercentage() { 
     let percentage = Int(Double(cases)/Double(calls) * 100) 
     percentageLabel.stringValue = String(percentage) + "%" 
} 

上述方法,不同之處時的情況下= 1,並調用= 0 這給出了一個致命錯誤運作良好

所以我創造了這個解決辦法:

func casePercentage() { 
    if calls != 0 { 
     let percentage = Int(Double(cases)/Double(calls) * 100) 
     percentageLabel.stringValue = String(percentage) + "%" 
    } else { 
     percentageLabel.stringValue = "0%" 
    } 
} 

這會給沒有錯誤,但在其他語言中,你可以檢查變量與.isNaN()方法。這在Swift2中如何工作?

+0

http://stackoverflow.com/questions/24351377/which-is-the-swift-equivalent-of-isnan – Cosyn

+0

@Cosyn,我讀了鏈接,但它作爲n00b對我來說沒有任何意義。 –

回答

0

可以「強制解包」使用!運營商的可選類型:

calls! //asserts that calls is NOT nil and gives a non-optional type 

然而,這將導致運行時錯誤,如果它是nil

一個選項,以防止使用nil或0就是做你做了什麼,並檢查它是否是0

二是選擇是nil -check

if calls != nil 

第三(最迅速-Y)的選擇是使用if let結構:

if let nonNilCalls = calls { 
    //... 
} 

if塊的內部將不會運行,如果callsnil

請注意,nil -checking和if let不是保護您免受除以0.您將不得不單獨檢查。

結合第二和你的方法:

//calls can neither be nil nor <= 0 
if calls != nil && calls > 0 
+1

啊謝謝!力量解開並沒有想到。 –