2014-07-10 41 views
1

在斯威夫特將字符串轉換爲雙時檢測斯威夫特串非法輸入如下進行:如何轉換爲Double

var string = "123.45" 
string.bridgeToObjectiveC().doubleValue 

如果string是不是合法的雙精度值(例如「a23e」。)撥打doubleValue的電話將返回0.0。由於它不返回nil我該如何區分0.0的合法用戶輸入與非法輸入?

回答

1

這不是一個特定於Swift的問題,在Objective-C中使用NSStringdoubleValue方法返回0.0表示無效輸入(這非常可怕!)。您將不得不手動檢查字符串的格式。

見的各種選擇,以你在這裏:

Check that a input to UITextField is numeric only

+0

謝謝,我結束了使用此代碼:'NSScanner.scannerWithString(串).scanDouble(無)' – Sterbic

0

這裏是解決方案,我會用:

var string = NSString(string:"string") 
var double = string.doubleValue 
if double == 0.0 && string == "0.0" 
{ 
    //double is valid 
} 
else 
{ 
    //double is invalid 
} 

首先,我不能重新分配字符串的雙重價值到原來的字符串變量,所以我把它分配給一個新的。如果可以這樣做,則在將其轉換爲double之前,將原始字符串變量分配給新變量,然後在第二個if語句中使用新變量代替字符串,並將第一個語句的字符串替換爲double。

它的工作方式是將字符串轉換爲不同變量中的double,然後檢查double是否等於0.0,以及原始字符串是否等於0.0作爲字符串。如果它們都相等,則double是有效的,因爲用戶最初輸入0.0,否則,double是無效的。如果double在else子句中無效,則放入要使用的代碼,例如通知用戶其輸入無效的警報。

+0

這並不適用於所有情況。如果字符串是「0.0」,這是一個有效的值,可以通過'doubleValue'解析。 – ColinE

+0

如果字符串是「0」或「0.00」或「0.000」或「-0.0」,該怎麼辦? – JeremyP

1

這是我的解決方案。嘗試解析它,如果它不是零返回雙值,否則處理它你想要的。

var string = "2.1.2.1.2" 
if let number = NSNumberFormatter().numberFromString(string) { 
    return number.doubleValue 
} else { 
    ... 
}