我有这段代码:
- (BOOL)isConnected {
return !!_sessionKey;
}
其中_sessionKey之前被定义为:
NSString* _sessionKey;
代码来自facebook-connect for iphone。
因为我通过查看其他人编写的代码来学习Objective-C。 !!
函数中使用的isConnection
对我来说似乎没用,或者我错过了什么?它做了什么?
答案 0 :(得分:17)
!!
会将结果转换为YES
或NO
。
使用!!x
是来自C的成语。这个表达式的结果是:
!!x == 0
时,x == 0 // x is zero
当!!x == 1
x != 0 // x is non-zero
至少在C中,您可以使用任何非零表达式作为满足if ()
或其他条件控制流的条件的值。但是,有时很高兴知道“真值”由1
表示而不仅仅是“非零”。
在Objective-C中,YES
被定义为1
而不是“非零”。因此,在Objective-C中,这个C语言变得更有用。
另一种表达方式:
!!x == NO
时,x == NO
当!!x == YES
x != NO
答案 1 :(得分:14)
这意味着“不是”。
在这种情况下,第一个!可以解释为“不存在”,所以它意味着(不存在sessionKey)。
这基本上是一个简短的说法
return (_sessionKey != nil).