我有这段代码:
- (BOOL)isConnected {
return !!_sessionKey;
}
_sessionKey是之前定义的变量:
NSString* _sessionKey;
这段代码来自于Facebook Connect for iPhone。
由于我正在通过查看其他人编写的代码学习Objective-C。在isConnection
函数中使用的!!
对我似乎没有用处,还是我错过了什么?它是做什么的?
我有这段代码:
- (BOOL)isConnected {
return !!_sessionKey;
}
_sessionKey是之前定义的变量:
NSString* _sessionKey;
这段代码来自于Facebook Connect for iPhone。
由于我正在通过查看其他人编写的代码学习Objective-C。在isConnection
函数中使用的!!
对我似乎没有用处,还是我错过了什么?它是做什么的?
!!
将结果转换为YES
或NO
。
!!x
是从C语言中借鉴来的习惯用法,该表达式的结果为:
x==0 // x为零
时,!!x == 0
x!=0 // x为非零
时,!!x == 1
至少在C语言中,您可以使用任何非零表达式作为满足if()
或其他条件控制流的条件的值。但是,有时了解“真值”是由1
而不仅仅是“非零”表示更好。
在Objective-C中,YES
被定义为1
,而不是“非零”。因此,在Objective-C中,这个C语言习惯用法变得更加有用。
另一种表述方式:
x==NO
时,!!x == NO
x!=NO
时,!!x == YES
!!
不是一个运算符,它只是将 !
运算符应用两次的结果。 - Nefrubyr它的意思是"非非"。
在这种情况下,第一个!可以解释为"不存在",因此它的意思是如果(sessionKey不存在)。
基本上这是一种简洁的说法。
return (_sessionKey != nil).