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

Why is Swift Decimal Returning Number from String Containing Letters?

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

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

为什么 Decimal 初始化为一个包含末尾字母的值 return 是有效的 Decimal?我希望 nil 被 return 编辑。

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

之所以如此,是因为 Decimal 接受字母前的任何数字值。这些字母充当其后任何数字的终止符。所以在你的例子中:

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

如果希望在字符串包含字母时两者都无效,那么您可以改用 Float