在Swift 2之前,我使用这个扩展来检查字符串是否仅由数字组成:
func isNumbersOnly() -> Bool {
let regexNumbersOnly = NSRegularExpression(pattern: ".*[^0-9].*", options: nil, error: nil)!
return regexNumbersOnly.firstMatchInString(self, options: nil, range: NSMakeRange(0, self.length())) != nil
}
但现在在Swift 2中我得到了错误
无法使用类型'(模式:'的参数清单叫用类型'NSRegularExpression'的初始设定式字符串,选项:NilLiteralConvertible可转换,错误:NilLiteral可转换)'
现在还有更好的方法吗?谢谢!
3条答案
按热度按时间soat7uwm1#
在Swift 2中,NSRegularExpression“抛出”,因此您必须将其与
try
一起使用。此外,您不能再为选项传递
nil
:如果您不想指定选项,则传递一个空数组(对于firstMatchInString
也是一样)。而
self.length()
应该变成self.characters.count
。最后注意:如果目标是确定String是否只包含数字,并且由于您将其命名为“isNumbersOnly”,则如果只有数字,则结果Boolean应该为true:它现在是相反的。我已经在我的例子中修正了这个问题。
忽略错误:
通过正确的错误处理:
lzfw57am2#
除了使用正则表达式,您还可以使用
CharacterSet
s来检查是否存在某些字符。要检查字符串是否只有数字,您可以使用以下命令:这个方法可以应用于任何类型的
CharacterSet
,而且在我看来,它比使用regex字符串要干净得多。9bfwbjaz3#
Swift 2已经调整了错误处理过程;您现在应该对调用执行
try
,而不是指定error
,并准备好捕获异常。例如:
...假设您选择不处理错误状态。