Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Swift检查整数时出错_Swift_String - Fatal编程技术网

使用Swift检查整数时出错

使用Swift检查整数时出错,swift,string,Swift,String,我想错误检查Swift中的整数条目,以便: 接受那些没有数千个分隔符的整数 接受在正确位置有数千个分隔符的整数 那些在错误位置有数千个分隔符的整数将被拒绝,并且 拒绝非整数 我相信我有一个满足1,2,4的解,但不是3 func makeInt( incoming: String ) { let tempValue = Int( incoming.stringByReplacingOccurrencesOfString( thousandSeparator, withString: ""

我想错误检查Swift中的整数条目,以便:

  • 接受那些没有数千个分隔符的整数
  • 接受在正确位置有数千个分隔符的整数
  • 那些在错误位置有数千个分隔符的整数将被拒绝,并且
  • 拒绝非整数
  • 我相信我有一个满足1,2,4的解,但不是3

    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确切地说,这比“其他符号都应该是
    ”更复杂,闭包是一种病态的初始化对象的方式,需要一些额外的步骤。整洁的