2017-06-03 36 views
0

我正在使用Swift的Decimal类型,试图确保用户输入的String是有效的Decimal为什么Swift Decimal从包含字母的字符串中返回数字?

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

为什么Decimal使用最后包含字母的值进行初始化会返回有效的Decimal?我希望返回nil

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

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

回答

2

是这样工作的,因为Decimal接受字母前的任何数值。这些字母可以作为任何数字的终结者。因此,在你的例子:

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

如果想既为无效如果字符串包含一个字母,那么你可以使用Float代替。

+0

唯一值得注意的例外是使用科学记数法; 'e +'不会终止数字,例如('12.21e + 03')将是一个有效的字符串,可以舍去到'12210' ... –

相关问题