programing

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

firstcheck 2022. 7. 16. 08:33
반응형

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

이 코드 행은 무슨 뜻입니까?

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

?그리고.:헷갈려.

이것은 C 3차 연산자(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) ? {code for YES} : {code for NO}

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

condition ? valueIfTrue : valueIfFalse

여기서 값은 선택된 경우에만 평가됩니다.

그건 그냥 일반적인 3진 연산자에요.물음표 앞의 부품이 참이면 부품을 평가하여 콜론 앞에 반환합니다.그렇지 않으면 부품을 평가하여 콜론 뒤에 반환합니다.

a?b:c

~와 같다

if(a)
    b;
else
    c;

재미있는 사실, null/n0을 체크하는 경우 objective-c. 예:

-(NSString*) getSomeStringSafeCheck
{
    NSString *string = [self getSomeString];
    if(string != nil){
        return String;
    }
    return @"";
}

빠른 방법은 다음과 같습니다.

-(NSString*) getSomeStringSafeCheck
{
    return [self getSomeString] != nil ? [self getSomeString] : @"";
}

그런 다음 가장 간단한 방법으로 업데이트할 수 있습니다.

-(NSString*) getSomeStringSafeCheck
{
    return [self getSomeString]?: @"";
}

왜냐하면 목표-C:

  1. 개체가 0일 경우 부울로 false를 반환합니다.
  2. Ternary 연산자의 두 번째 매개 변수는 '?'의 왼쪽에 결과를 반환하므로 비워 둘 수 있습니다.

예를 들어 다음과 같이 적습니다.

[self getSomeString] != nil?: @"";

두 번째 파라미터는 부울값을 반환하기 때문에 예외가 느려집니다.

배리 와크의 훌륭한 설명을 바탕으로...

3진 연산자의 중요한 점은 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!

3진 연산자의 예시.is Female 부울 변수의 값이 YES인 경우 "GENDER IS MAL"로 출력합니다.그렇지 않으면 "GENDER IS MAL"로 출력합니다.

? means = execute the codes before the : if the condition is true. 
: means = execute the codes after the : if the condition is false.

목표-C

BOOL isFemale = YES;
NSString *valueToPrint = (isFemale == YES) ? @"GENDER IS FEMALE" : @"GENDER IS MALE";
NSLog(valueToPrint); //Result will be "GENDER IS FEMALE" because the value of isFemale was set to YES.

Swift의 경우

let isFemale = false
let valueToPrint:String = (isFemale == true) ? "GENDER IS FEMALE" : "GENDER IS MALE"
print(valueToPrint) //Result will be  "GENDER IS MALE" because the isFemale value was set to false.

이것은 C의 일부이므로 목적 C에 고유하지 않습니다.여기 번역본이 있습니다.if스테이트먼트:

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

그냥 if-then-else 문장을 쓰는 짧은 형식일 뿐이에요.이는 다음 코드와 같은 의미입니다.

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

if/else 문과 같은 3진 연산자입니다.

if(a > b) {
what to do;
}
else {
what to do;
}

3차 연산자에서는 다음과 같습니다.조건?조건이 true일 경우 처리:false일 경우 처리;

(a > b) ? what to do if true : what to do if false;

방금 삼원 연산자에 대해 뭔가 새로운 걸 알게 됐어요중간 피연산자를 생략한 짧은 형식은 정말로 우아하며, C가 관련성을 유지하는 많은 이유 중 하나입니다.참고로 C#에서 구현된 루틴의 맥락에서 처음 이 문제를 떠올렸습니다.이 루틴은 3진 연산자도 지원합니다.3차 연산자는 C에 있기 때문에 본질적으로 그 확장인 다른 언어(예를 들어 Objective-C, C#)로 되어 있는 것은 당연하다.

모두가 그것을 언급했듯이, 그것은 조건부 연산자를 나타내는 방법이다.

if (condition){ 
    true 
} 
else {
    false
}

연산자 3의 사용(condition)? true:false이 정보를 덧붙이자면 하기 위해서 새로운 했습니다.??.

let imageObject: UIImage = (UIImage(named: "ImageName")) ?? (initialOfUsername.capitalizedString).imageFromString

어떤 점이 비슷합니까?

int a = 6, c= 5;
if (a > c) 
{ 
 a is greater
} else {
 c is greater
}

와 동등하다

if (a>c)?a:c==>와 같다if (a>c)?:c

?:사용할 수 있다??★★★★★★★★★★★★★★★★★★.

int padding = ([[UIScreen mainScreen] bounds].size.height <= 480) ? 15 : 55;

수단

int padding; 
if ([[UIScreen mainScreen] bounds].size.height <= 480)
  padding = 15;
else
  padding = 55; 

언급URL : https://stackoverflow.com/questions/2595392/what-does-the-question-mark-and-the-colon-ternary-operator-mean-in-objectiv

반응형