물음표와 콜론(?: 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:
- 개체가 0일 경우 부울로 false를 반환합니다.
- 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
'programing' 카테고리의 다른 글
mongoose 모델에서 중첩된 데이터를 쿼리하는 방법 (0) | 2022.07.16 |
---|---|
C의 객체 파일이 뭐죠? (0) | 2022.07.16 |
JEST 유닛 테스트스크립트가 TypeError: this로 실패합니다._environment.runScript는 함수가 아닙니다. (0) | 2022.07.16 |
변수 개수의 인수를 printf/sprintf로 전달하는 방법 (0) | 2022.07.16 |
char*x가 값이 "hello"인 문자열을 가리킬 때 gdb에서 조건부 중단점을 설정하려면 어떻게 해야 합니까? (0) | 2022.07.16 |