2013-03-22 3 views
1
#define IS_IPHONE5 (([[UIScreen mainScreen] bounds].size.height-568)?NO:YES) 

위의 내용을 사용하여 사용자가 iPhone 5를 사용하고 있는지 확인하지만 실제로 작동하는 방식을 이해하지 못합니다.간단한 문장을 이해하려고 시도합니다

상식적으로 사용자 화면 경계가 X - 568 = 0이면 사용자가 iPhone 5를 사용하고 있음을 알 수 있습니다. 위의 명령문에서 0은 BOOL이 아니므로 예를 반환하는 방식을 이해할 수 없습니다 .

+1

다른 사람들처럼 설명했듯이 효과가 있습니다. 그것은이 코드를 작성한 사람이 코드를 읽을 수 없게 만드는 것입니다. 왜 그냥'([[UIScreen mainScreen] bounds] .size.height == 568.f)'?? – borrrden

+0

@borrrden 아무 생각이 없는데 같은 방법으로 생각해 봅니다. (누락 된 것이없는 한) – Segev

답변

2

(0 ? "yes" : "no") 결과는 "no"입니다.

(0 ? "no" : "yes")의 결과는 "yes"입니다.

? 다음의 표현식은 부울식이 참일 때의 결과입니다. : 다음의 표현식은 부울 표현식이 거짓 일 때의 결과입니다.

1

그것은 매우 간단합니다, 당신은 이미 논리를 해결했다

은, 네, 그것은 제로에가 YES를 반환, 제로를 말할 것이다.

프로그래밍에서 ZERO MEANS FALSE! 따라서 거짓은 "예"를 반환합니다.

반면 0이 아닌 것은 TRUE를 의미합니다! 따라서 TRUE는 "NO"를 반환합니다.

여기에 언급 된 방식으로 작동하는 삼항 연산자가 여기에 사용됩니다.

+0

그렇지만 0은 '예'를 반환하는 이유는 무엇입니까? – Segev

+1

프로그래밍에서 0은 거짓을 의미하고 거짓은 후자 인 값을 YES로 반환하기 때문입니다. –

+1

@EXEC_BAD_ACCESS 0은 false로 계산되기 때문입니다. 다른 것은 사실입니다. 삼항 연산자에서 statement가 false이면 후자가 반환됩니다 (참이면 반환됩니다). 아니오의 경우 : 예, 예는 후자이므로, 예 (YES)가 리턴된다. – 0xSina

2

는 의미

if([[UIScreen mainScreen] bounds].size.height-568) 
    return NO; 
return YES; 

아이폰 5의 높이가 너무 [[UIScreen mainScreen] bounds].size.height-568 = 0 568이다, 0NO을 의미하며, 다른 사람들이 YES

+0

3 진 연산자가 *를 반환하지 않는다고 생각합니다. ... – Sebivor

+0

@modifiablelvalue'int a = _yourBool? 3 : 5'를 코드하는 것처럼 반환해야하지만'_yourBool? 3 : 5'는 유용하지 않기 때문에 –

+0

"return"에 대한 다른 정의가 있다고 생각합니다. 내 정의는 독점적으로 C에서'return '의 동작을 위해 예약되어 있으며,이 정의에 따르면 삼항 연산자는 확실히 반환하지 않습니다. 만약 그렇다면'int main (void) {char * str = 0? "거짓": "사실"; puts (str); }'main은'puts (...);'문에 도달하기 전에 반환하기 때문에 아무 것도 출력하지 않습니다. – Sebivor

0

첫 번째 의미,이 같은 일부 문 : "isTrue는 NO : YES", 그 의미 "?"앞에있는 문장이 정말로 굳을 때, 전체 문장 (참 : NO : YES) 값은 "NO"이고, 그렇지 않은 경우 값은 "YES"이고, 여기서는이 문장의 값 ([[UIScreen mainScreen] bounds] .size.height-568)는 0 또는 NON 0이 될 수 있으므로 [[UIScreen mainScreen] bounds] .size.height가 568 인 경우 위의 상태 멘은 0이고, 0은 거짓을 의미하므로 "예"를 반환합니다.

관련 문제