이 코드 줄은 무엇을 의미합니까?
label.frame = (inPseudoEditMode) ? kLabelIndentedRect : kLabelRect;
?
과는 :
나를 혼란스럽게.
variable ?: anotherVariable
. 이것이 무엇을 의미합니까? '
(valOrVar != 0) ? valOrVar : anotherValorvar
이 코드 줄은 무엇을 의미합니까?
label.frame = (inPseudoEditMode) ? kLabelIndentedRect : kLabelRect;
?
과는 :
나를 혼란스럽게.
variable ?: anotherVariable
. 이것이 무엇을 의미합니까? '
(valOrVar != 0) ? valOrVar : anotherValorvar
답변:
이것은 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
?:
)가 없는 삼항 연산자 는 왼쪽이 표현식 인 상황에서 훨씬 우수 하다는 점을 언급 할 가치가 ?:
있습니다. 예를 들어, 두 번 [myArray firstObject] ? [myArray firstObject] : @"Hello World";
호출 firstObject
하면 ( firstObject
리턴하지 않으면 nil
) [myArray firstObject] ?: @"Hello World";
동일한 결과 가 생성되지만 firstObject
두 번 이상 호출하지 않습니다 .
배리 워크의 훌륭한 설명을 바탕으로 ...
삼항 연산자에서 중요한 것은 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!
삼항 연산자 예. isFemale 부울 변수의 값이 YES이면 "GENDER IS FEMALE"을 인쇄하고 그렇지 않으면 "GENDER IS MALE"을 인쇄하십시오.
? 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.
스위프트
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.
재미있는 사실, objective-c에서 null / nil을 확인하려는 경우 예를 들면 다음과 같습니다.
-(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]?: @"";
}
Objective-C에서 :
따라서 다음과 같이 작성하십시오.
[self getSomeString] != nil?: @"";
두 번째 매개 변수는 부울 값을 반환하므로 예외가 발생합니다.
if / else 문과 같이 삼항 연산자입니다.
if(a > b) {
what to do;
}
else {
what to do;
}
삼항 연산자에서 다음과 같습니다. condition? 조건이 참인 경우해야 할 일 : 거짓 인 경우해야 할 일;
(a > b) ? what to do if true : what to do if false;
방금 삼항 연산자에 대해 새로운 것을 배웠습니다. 중간 피연산자를 생략하는 짧은 형식은 진정으로 우아하며 C가 관련성을 유지하는 많은 이유 중 하나입니다. 참고로, C #으로 구현 된 루틴의 맥락 에서이 문제를 해결하기 위해 실제로 삼진 연산자를 지원합니다. 삼항 연산자는 C에 있기 때문에 본질적으로 확장 된 다른 언어 (예 : Objective-C, C #) 일 수도 있습니다.
모두가 언급했듯이 조건부 연산자를 나타내는 방법입니다.
if (condition){
true
}
else {
false
}
삼항 연산자 사용 (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
대신에 ?:
우리는 사용할 수 있습니다 ??
.