近期開發(fā)中遇到一個(gè)奇怪的問題 特此記錄!
?func?textField(_textField:UITextField, shouldChangeCharactersIn range:NSRange, replacementString string:String) ->Bool{
? ? ? ? //1.計(jì)算最大值有問題 21 + -1 = 21 總是等于21 不知道怎么回事?
? ? ? ? let?result = textField.text?.count??0+(string.count-range.length)
return result
//3.這種計(jì)算是糾正后的
? ? ? ? let?result = (textField.text?.count??0)+(string.count-range.length)
return ?result
? ? ? ? //2.分開計(jì)算就是可以的 21 + -1 = 20
? ? ? ? let?textLeng:NSInteger= textField.text?.count??0
? ? ? ? let?replace:NSInteger= string.count-range.length
? ? ? ? return?textLeng+replace<=MAX_STARWORDS_LENGTH
? ? }
上面代碼中1計(jì)算時(shí)候能限制字符,但是限制的字符總是大于最大值+1,而且一旦達(dá)到最大值就不能操作textField 。這個(gè)bug很奇怪,最后改成2的方法就可以了。
經(jīng)過調(diào)試,發(fā)現(xiàn)一旦越界后最大值21 + -1 怎么計(jì)算都是打印的21 ,這難道是swift的多項(xiàng)計(jì)算的bug??
如果分開計(jì)算后就好了。
后面經(jīng)過猜測可能是textField.text?.count??0這個(gè)運(yùn)算導(dǎo)致的,嘗試改成(textField.text?.count??0)然后加入計(jì)算里面,果然好了,所以在數(shù)值計(jì)算時(shí)候一定要注意運(yùn)算符號(hào)的使用,尤其運(yùn)算優(yōu)先順序的邏輯處理。