在斯威夫特將字符串轉換爲雙時檢測斯威夫特串非法輸入如下進行:如何轉換爲Double
var string = "123.45"
string.bridgeToObjectiveC().doubleValue
如果string
是不是合法的雙精度值(例如「a23e」。)撥打doubleValue
的電話將返回0.0
。由於它不返回nil
我該如何區分0.0
的合法用戶輸入與非法輸入?
在斯威夫特將字符串轉換爲雙時檢測斯威夫特串非法輸入如下進行:如何轉換爲Double
var string = "123.45"
string.bridgeToObjectiveC().doubleValue
如果string
是不是合法的雙精度值(例如「a23e」。)撥打doubleValue
的電話將返回0.0
。由於它不返回nil
我該如何區分0.0
的合法用戶輸入與非法輸入?
這不是一個特定於Swift的問題,在Objective-C中使用NSString
,doubleValue
方法返回0.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子句中無效,則放入要使用的代碼,例如通知用戶其輸入無效的警報。
這是我的解決方案。嘗試解析它,如果它不是零返回雙值,否則處理它你想要的。
var string = "2.1.2.1.2"
if let number = NSNumberFormatter().numberFromString(string) {
return number.doubleValue
} else {
...
}
謝謝,我結束了使用此代碼:'NSScanner.scannerWithString(串).scanDouble(無)' – Sterbic