ios - Swift 文本字段结合了两个功能

标签 ios swift xcode swift3 uitextfield

您好,我的文本字段函数有以下代码,它只允许数字、点,并且总共不超过 7 个字符:

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {

    let length = ((textField.text?.characters.count)! + string.characters.count)
    if (length > 7)
    {
        return false
    }
    else
    {
     //   return true
        let inverseSet = NSCharacterSet(charactersIn:".0123456789").inverted
        let components = string.components(separatedBy: inverseSet)
        let filtered = components.joined(separator: "")
        return string == filtered && true
    }
    }

现在我在这个网站上发现了另一段很好的代码,它只允许一个小数字符:

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {


    if(string == "." ){
        let countdots = textField.text!.components(separatedBy: ".").count - 1

        if countdots > 0 && string == "."
        {
            return false
        }
    }
    return true

}

我正在思考如何将这些东西组合成一个函数?不断出现错误..也许有人可以提出建议?

最佳答案

可以使用基本控制流(else if)将它们组合起来。

顺便说一句,return string == Filtered && true 行写得不好。如果 string == 已过滤,则返回 true;如果 string != 已过滤,则返回 false。因此,&& 子句是一个无用的补充。将其重写为返回字符串==过滤

考虑到这一点,以下是清理后的函数:

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    let length = ((textField.text?.characters.count)! + string.characters.count)
    if (length > 7) {
        return false
    }
    else if(string == "." ) {
        let countdots = textField.text!.components(separatedBy: ".").count - 1
        if countdots > 0 && string == "." {
        return false
        }
        return true
    }
    else
    {
     // return true if the string is equivalent after removing all non-numbers (and therefore consisted of only numbers)
        let inverseSet = NSCharacterSet(charactersIn:".0123456789").inverted
        let components = string.components(separatedBy: inverseSet)
        let filtered = components.joined(separator: "")
        return string == filtered
    }
}

关于ios - Swift 文本字段结合了两个功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42193665/

相关文章:

objective-c - 在 Objective C 项目上添加 Swift 或启用模块 = YES 会导致构建错误

ios - 如何将提示位置移动到标题下方或向后移动按钮位置

ios - 给定 ViewController 上的 Apps Script API 错误

swift - SpriteKit - 节点不添加到 SKCameraNode - Swift

iPhone开发者: no identity found

xcode - 确定给定年份中阵亡将士纪念日的 NSDate

ios - 使自定义 CALayer 子类在添加到 super 层后自动重绘自身

ios - 如何在 iphone 的图像上逐像素添加颜色?

swift - 为什么存储子字符串可能会导致 Swift 中的内存泄漏?

ios - 如何旋转视频?