嗨我的文本字段功能有以下代码,只允许数字,点数,总共不超过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
}
我试图围绕如何将这些东西组合成一个功能?不断收到错误..也许有人会建议?
答案 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
}
}