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

时间:2017-02-12 21:48:42

标签: 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

}

我试图围绕如何将这些东西组合成一个功能?不断收到错误..也许有人会建议?

1 个答案:

答案 0 :(得分:0)

可以使用基本控制流程组合它们(否则如果)。

顺便说一句,return string == filtered && true行写得不好。如果string == filtered,它将返回true,如果string!= filtered,它将返回false。因此,&&子句是无用的补充。将其重写为return string == filtered

考虑到这一点,这里清理了你的功能:

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
    }
}