Что значит !! значит в Objective-C - PullRequest
9 голосов
/ 12 ноября 2009

У меня есть этот код:

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

где _sessionKey определен ранее как:

NSString* _sessionKey;

код приходит с фейсбук-коннекта для iphone.

Поскольку я изучаю Objective-C, глядя на код, написанный другими людьми. !!, используемый в функции isConnection, кажется мне бесполезным, или я что-то упустил? Что это делает?

Ответы [ 2 ]

17 голосов
/ 12 ноября 2009

!! преобразует результат в 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
14 голосов
/ 12 ноября 2009

Это значит «не нет».

В этом случае первый! может интерпретироваться как "не существует", так что это означает, что (не существует sessionKey).

Это, по сути, короткий способ сказать

return (_sessionKey != nil). 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...