近期开发中遇到一个奇怪的问题 特此记录!
func textField(_textField:UITextField, shouldChangeCharactersIn range:NSRange, replacementString string:String) ->Bool{
//1.计算最大值有问题 21 + -1 = 21 总是等于21 不知道怎么回事?
let result = textField.text?.count??0+(string.count-range.length)
return result
//3.这种计算是纠正后的
let result = (textField.text?.count??0)+(string.count-range.length)
return result
//2.分开计算就是可以的 21 + -1 = 20
let textLeng:NSInteger= textField.text?.count??0
let replace:NSInteger= string.count-range.length
return textLeng+replace<=MAX_STARWORDS_LENGTH
}
上面代码中1计算时候能限制字符,但是限制的字符总是大于最大值+1,而且一旦达到最大值就不能操作textField 。这个bug很奇怪,最后改成2的方法就可以了。
经过调试,发现一旦越界后最大值21 + -1 怎么计算都是打印的21 ,这难道是swift的多项计算的bug??
如果分开计算后就好了。
后面经过猜测可能是textField.text?.count??0这个运算导致的,尝试改成(textField.text?.count??0)然后加入计算里面,果然好了,所以在数值计算时候一定要注意运算符号的使用,尤其运算优先顺序的逻辑处理。
网友评论