为什么Swift Decimal从包含字母的字符串返回数字?

时间:2017-06-03 02:56:21

标签: swift decimal nsdecimalnumber

我正在使用Swift的Decimal类型,尝试确保用户输入的String是有效的Decimal

我的Playground文件中有两个String值,每个值都包含一个字母。其中一个值在开头包含一个字母,而另一个在末尾包含一个字母。我使用每个值初始化Decimal,并且只有一个Decimal初始化失败; Decimal初始化为包含开头字母的值。

为什么使用包含末尾字母的值初始化的Decimal会返回有效的Decimal?我希望能够返回nil

附件是我的Playground文件的截图。

Screenshot of code that produces a valid Decimal from a String with a trailing letter

1 个答案:

答案 0 :(得分:2)

它的工作方式是这样的,因为Decimal接受字母前的任何数字值。这些字母充当了它之后的任何数字的终结符。所以在你的例子中:

12a = 12   ( a is the terminator in position 3 )
a12 = nil  ( a is the terminator in position 1 )

如果字符串包含字母,如果想要两者都无效,那么您可以使用Float代替。