Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
转换为双精度时如何检测Swift字符串中的非法输入_Swift - Fatal编程技术网

转换为双精度时如何检测Swift字符串中的非法输入

转换为双精度时如何检测Swift字符串中的非法输入,swift,Swift,在Swift中将字符串转换为双精度字符串的操作如下: var string = "123.45" string.bridgeToObjectiveC().doubleValue 如果string不是合法的双精度值(例如“a23e”),则对doubleValue的调用将返回0.0。由于它不返回nil我该如何区分0.0的合法用户输入和非法输入?这不是Swift特有的问题,在Objective-C中使用NSString,对于无效输入,doubleValue方法返回0.0(这太可怕了!)您必须手动检查

在Swift中将字符串转换为双精度字符串的操作如下:

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
}
首先,我无法将字符串的双精度值重新分配给原始字符串变量,因此我将其分配给了一个新变量。如果可以这样做,请在将原始字符串变量转换为双精度变量之前将其分配给一个新变量,然后在第二个If语句中使用新变量代替字符串,并将双精度替换为第一个字符串t声明


其工作方式是将字符串转换为另一个变量中的double,然后检查double是否等于0.0,以及原始字符串是否等于0.0作为字符串。如果两者都相等,则double有效,因为用户最初输入的是0.0,否则,double无效。如果double无效,请输入要使用的代码在else子句中,例如通知用户其输入无效的警报。

这是我的解决方案。尝试解析它,如果不是nil,则返回双精度值,否则按您的意愿处理它

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

这并不是在所有情况下都有效。如果字符串是
“0.0”
,这是一个有效值,可以通过
doubleValue来解析。如果字符串是“0”或“0.00”或“0.000”或“-0.0”,该怎么办?谢谢,我最后使用了以下代码:
NSScanner.scannerWithString(string)。scannerWithString(无)