[objective-c] objective-c에서 물음표와 콜론 (? : 삼항 연산자)은 무엇을 의미합니까?

이 코드 줄은 무엇을 의미합니까?

label.frame = (inPseudoEditMode) ? kLabelIndentedRect : kLabelRect;

?과는 :나를 혼란스럽게.



답변

이것은 C 삼항 연산자입니다 (Objective-C는 C의 수퍼 세트입니다).

label.frame = (inPseudoEditMode) ? kLabelIndentedRect : kLabelRect;

의미 적으로

if(inPseudoEditMode) {
 label.frame = kLabelIndentedRect;
} else {
 label.frame = kLabelRect;
}

첫 번째 요소가없는 3 원 (예 🙂 variable ?: anotherVariable(valOrVar != 0) ? valOrVar : anotherValOrVar


답변

삼항 또는 조건부 연산자입니다. 기본 형식은 다음과 같습니다.

condition ? valueIfTrue : valueIfFalse

값이 선택된 경우에만 평가됩니다.


답변

간단히 말해서 논리는

(condition) ? {code for YES} : {code for NO}


답변

배리 워크의 훌륭한 설명을 바탕으로 …

삼항 연산자에서 중요한 것은 if-else가 할 수없는 곳에서 사용할 수 있다는 것입니다. 즉 : 조건 또는 메서드 매개 변수 내부

[NSString stringWithFormat: @"Status: %@", (statusBool ? @"Approved" : @"Rejected")]

… 전 처리기 상수에 크게 사용됩니다.

// in your pch file...
#define statusString (statusBool ? @"Approved" : @"Rejected")

// in your m file...
[NSString stringWithFormat: @"Status: %@", statusString]

따라서 if-else 패턴으로 로컬 변수를 사용하고 해제 할 필요가 없습니다. FTW!


답변

그것은 일반적인 삼항 연산자 입니다. 물음표 앞의 파트가 true이면 콜론 앞의 파트를 평가하여 리턴하고 그렇지 않으면 콜론 뒤의 파트를 평가하여 리턴합니다.

a?b:c

처럼

if(a)
    b;
else
    c;


답변

이것은 C의 일부이므로 Objective-C에 국한되지 않습니다. if문장 으로의 번역은 다음과 같습니다 .

if (inPseudoEditMode)
    label.frame = kLabelIndentedRec;
else
    label.frame = kLabelRect;


답변

if-then-else 문을 작성하는 간단한 형식입니다. 다음 코드와 같은 의미입니다.

if(inPseudoEditMode)
  label.frame = kLabelIndentedRect;
else
  label.frame = kLabelRect;