SWift 中UITextField中限制字符长度问题

近期开发中遇到一个奇怪的问题 特此记录!

 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)然后加入计算里面,果然好了,所以在数值计算时候一定要注意运算符号的使用,尤其运算优先顺序的逻辑处理。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。