使用Swift检查整数时出错
我想错误检查Swift中的整数条目,以便:使用Swift检查整数时出错,swift,string,Swift,String,我想错误检查Swift中的整数条目,以便: 接受那些没有数千个分隔符的整数 接受在正确位置有数千个分隔符的整数 那些在错误位置有数千个分隔符的整数将被拒绝,并且 拒绝非整数 我相信我有一个满足1,2,4的解,但不是3 func makeInt( incoming: String ) { let tempValue = Int( incoming.stringByReplacingOccurrencesOfString( thousandSeparator, withString: ""
func makeInt( incoming: String ) {
let tempValue = Int( incoming.stringByReplacingOccurrencesOfString( thousandSeparator, withString: "" ).stringByTrimmingCharactersInSet( NSCharacterSet.whitespaceCharacterSet() ) )
if tempValue != nil {
print( tempValue! )
}
else {
print( "Life hurts" )
}
}
makeInt( "1000" ) --> 1000
makeInt( "1,000" ) --> 1000
makeInt( "10,00" ) --> 1000 *Should be Life hurts*
makeInt( "doggy" ) --> Life hurts
下一步我要做的是建立一个正则表达式,它映射到数千个地方的数千个分隔符,但在我去之前,我很好奇是否有人有其他方法来实现这一点,因为这似乎是一个相当普遍的需要
非常感谢 您可以使用正则表达式检查格式,但可能更容易的方法是使用现有的
NSNumberFormatter
,它为您进行此类验证,例如:
let formatter: NSNumberFormatter = {
let _formatter = NSNumberFormatter()
_formatter.numberStyle = .DecimalStyle
return _formatter
}()
然后
func makeInt(incoming: String) {
guard let value = formatter.numberFromString(incoming) else {
print("Life hurts")
return
}
print(value.integerValue)
}
这演示了您描述的行为。然后它还支持本地化(千位分隔符是根据用户的区域设置自动确定的)。为什么不使用用户区域设置来扫描数字,然后就不用千位分隔符了呢。一些国家写道,即10.00.000,00(我认为印度)@HannesSverrisson确切地说,这比“其他符号都应该是
,
”更复杂,闭包是一种病态的初始化对象的方式,需要一些额外的步骤。整洁的