开发者

What does !! mean in Objective-C

I have this code:

- (BOOL)isConnected {
    return !!_sessionKey;
}

where _sessionKey is defined earlier as:

NSString* _sessionKey;

the code comes from the facebook-connect for iphone.

Since I am learning Objective-C by looking at code written by other people. The !! used in the isConnection function seems 开发者_StackOverflowuseless to me, or am I missing something? What does it do?


The !! converts the result to either YES or NO.

Using !!x is an idiom from C. The result of this expression is:

  • !!x == 0 when x == 0 // x is zero
  • !!x == 1 when x != 0 // x is non-zero

At least in C, you can use any non-zero expression as a value which satisfies the condition of an if () or other conditional control flow. However, sometimes it is nice to know that the "true value" is represented by 1 rather than merely "non-zero".

In Objective-C, YES is defined as 1 rather than as "non-zero". Thus, in Objective-C, this C idiom becomes more useful.

Another way of putting it:

  • !!x == NO when x == NO
  • !!x == YES when x != NO


It means "not not".

In this case, the first ! could be interpreted as "doesn't exist", so it means if (not doesn't exist sessionKey).

It's basically a short way to say

return (_sessionKey != nil). 
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜