SWift 中UITextField中限制字符長度問題

近期開發(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)先順序的邏輯處理。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容