如何在 Swift 中检查某个东西是否是字符串

问题描述 投票:0回答:1

我目前正在尝试实现一个日期输入文本字段,这是下面的代码:

  extension OneCreateAccountViewController {
        func textFieldDidChangeSelection(_ textField: UITextField) {
        
        if textField.placeholder == "DD/MM/YY" {
            
            if textField.text!.count >= 2 && textField.text!.count < 3  {

                textField.text! = "\(textField.text!)/"

            } else {
                
                if textField.text!.count >= 5 && textField.text!.count < 6  {

                    textField.text! = "\(textField.text!)/"

                } else {
                    
                    if textField.text!.count >= 9 {
                        
                        textField.text!.removeLast()
//                        
//                    } else {
//                        if Int(textField.text!) == nil {
//                            textField.text! = ""
//                        }
                    }
                }
            }
        }
    }
}

正如您所知,这种格式存在很大问题,原因如下:.

1: 一旦插入“/”,就无法退格,并且原始数字是永久的。这是因为代码被锁定为这样一个事实:一旦在 3 个字符后添加“/”,就无法删除另一个字符,因为这会使其少于 3 个字符,并且代码设计为一旦计数达到就始终输入该符号一定数量。

2:如果您点击iPhone上的文本字段,您会看到一个“自动填充”弹出窗口,它允许您插入不同支持钥匙串的网站的密码。这是有问题的,因为您的生日可以用密码的格式写入(例如,我的密码是“Mous772”,我“自动填充”文本字段,因此条目写成“Mo/us/772”)

如果您看到第三个 else 语句,我尝试通过以下方式解决此问题:如果文本不是整数,则它会被拒绝。然而,这会导致一个问题,因为“/”不是整数值,所以它总是失败。

swift string integer uitextfield
1个回答
0
投票

基于对数的解决方案在内部执行(某些)与基于字符串的解决方案相同的操作,并且可能(微不足道)更快,因为它只生成长度并忽略数字。但我实际上不会认为它的意图更清晰——这是最重要的因素。 分享

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.