前言
三目運(yùn)算符:也叫三元運(yùn)算符。這個(gè)運(yùn)算符的符號(hào)是: ? :,下面這篇文章主要給大家介紹了關(guān)于iOS三目運(yùn)算符的相關(guān)內(nèi)容,分享出來(lái)供大家參考學(xué)習(xí),下面話不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹吧
基礎(chǔ)
一般情況下,我們使用三目運(yùn)算符(?:)的語(yǔ)法格式是:
(expression)?if-true-statement :if-false-statement;
如果表達(dá)式expression結(jié)果為真,則執(zhí)行if-true-statement,否則執(zhí)行if-false-statement。
我們經(jīng)常會(huì)使用三目運(yùn)算符進(jìn)行簡(jiǎn)單的判斷賦值,例如:
y = x ? x : z;
即如果x為真,則返回x,如果x為假,則返回z,這是最簡(jiǎn)單最基本的用法。
高級(jí)
但是偶爾我們也會(huì)看到這種用法:
y = x ? : z;
? 與 :之間沒(méi)有任何操作數(shù),這是什么用法呢?
通過(guò)幾次實(shí)驗(yàn)發(fā)現(xiàn),當(dāng)x為真時(shí),y的值與x值一致。那我猜測(cè)? 與 : 之間省略了x。
也就是說(shuō),y = x ? : z; 與y = x ? x : z;等價(jià),這樣就和事實(shí)相一致了。
復(fù)雜
但是,這這只是最簡(jiǎn)單的情況,那么稍微復(fù)雜一點(diǎn)的情況呢?
如:a > b ? : b中間省略了什么呢?會(huì)是a嗎?
經(jīng)過(guò)驗(yàn)證后發(fā)現(xiàn),并不是a。
其實(shí)它是省略了a > b 。
也就是說(shuō)a > b ? : b 等價(jià)于 a > b ? a > b : b;
那么這樣似乎可以得出結(jié)論,? 與 : 中間省略的東西,是與? 之前的表達(dá)式一致的。
那么確實(shí)是這樣的嗎?
特例
我們知道,在OC中,有一類(lèi)很奇怪的運(yùn)算符,自增(++)/自減(--)運(yùn)算符。那么它在三目運(yùn)算符中的表現(xiàn)如何呢?
如:
int x = 0; int y = ++x ? ++x : 3;
則最終,y的值為2。
然而,
int x = 0; int y = ++x ? : 3;
最終,y的值居然是1。
怎么兩次的結(jié)果不一致呢?按照上面的結(jié)論,y的值應(yīng)該都是2才對(duì)啊。
那為什么第一種結(jié)果y的值為2,而第二種結(jié)果y的值為1呢?
結(jié)論
據(jù)我猜想,? 與: 之間省略的應(yīng)該是?之前表達(dá)式的值,而不是省略的表達(dá)式。
這樣就可以解釋上面所有的情況了。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)VEVB武林網(wǎng)的支持。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注