我正在使用Swift的Decimal
类型,尝试确保用户输入的String
是有效的Decimal
。
我的Playground文件中有两个String
值,每个值都包含一个字母。其中一个值在开头包含一个字母,而另一个在末尾包含一个字母。我使用每个值初始化Decimal
,并且只有一个Decimal
初始化失败; Decimal
初始化为包含开头字母的值。
为什么使用包含末尾字母的值初始化的Decimal
会返回有效的Decimal
?我希望能够返回nil
。
附件是我的Playground文件的截图。
答案 0 :(得分:2)
它的工作方式是这样的,因为Decimal
接受字母前的任何数字值。这些字母充当了它之后的任何数字的终结符。所以在你的例子中:
12a = 12 ( a is the terminator in position 3 )
a12 = nil ( a is the terminator in position 1 )
如果字符串包含字母,如果想要两者都无效,那么您可以使用Float
代替。