Swift 文本字段结合了两个功能
Posted
技术标签:
【中文标题】Swift 文本字段结合了两个功能【英文标题】:Swift text field combine two functions 【发布时间】:2017-02-12 21:48:42 【问题描述】:您好,我的文本字段函数有以下代码,它只允许数字、点且总共不超过 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
我正在努力思考如何将这些东西组合成一个功能?不断出错..也许有人可以建议?
【问题讨论】:
您能否包含您尝试过的不断给您错误的代码? 您有多种选择,您可以将代码作为附加的if-else
语句包含在内,或者将每个条件设为自己的方法(返回Bool
)并使用一系列guard
语句来确定它们是成功还是失败,或者您可以使用protocol
来定义一系列条件,然后您可以循环遍历这些条件。在任何情况下,您都需要决定要采取的优先顺序
你能举例说明如何实现“else if”但保持相同的返回 true/false 吗?或者我可以有几个返回真/假?
【参考方案1】:
它们可以使用基本控制流进行组合(否则)。
顺便说一句,return string == filtered && true
这行写得不好。如果 string == 过滤,它将返回 true,如果 string !=过滤,它将返回 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
【讨论】:
它不起作用,在最后一个“else”处出现错误。 - 预期声明 请再试一次。有一个额外的括号。 @KirillC 感谢 Faris,非常感谢您的回答。 没问题。干杯!以上是关于Swift 文本字段结合了两个功能的主要内容,如果未能解决你的问题,请参考以下文章
无法在 SWIFT 中使用 UipickerView 委派文本字段
swift涂鸦功能的实现包括截图,画板封装,文本编辑,分享功能,橡皮擦功能,马赛克技术
三个文本字段值的总和,无需单击按钮(Swift - Xcode)