このコード行はどういう意味ですか?
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;
}
最初の要素のない三項(例:)variable ?: anotherVariable
は、(valOrVar != 0) ? valOrVar : anotherValOrVar
?:
)のない3項演算子は、左側が式である場合、式が2回以上評価されるのを防ぐため、さらに優れていることはおそらく言及する価値があります?:
。たとえば、2回[myArray firstObject] ? [myArray firstObject] : @"Hello World";
呼び出しますfirstObject
(firstObject
が返されない場合nil
)。[myArray firstObject] ?: @"Hello World";
同じ結果が生成されますfirstObject
が、2回以上呼び出されることはありません。
?:
は、歌手に似た絵文字であるため、Elvis演算子とも呼ばれます。そしてもちろん、この場合、1つの要素を削除しているため、3項演算子ではなく2項演算子になります。バイナリ演算子は(プログラミングするとき、我々は通常、使用事業者の大多数含まれ、、、、、、、、など)。*
+
-
^
|
||
&
>>
バリーワークの優れた説明に基づいて...
三項演算子について非常に重要なのは、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!
これはCの一部であるため、Objective-C固有ではありません。これがif
ステートメントへの翻訳です:
if (inPseudoEditMode)
label.frame = kLabelIndentedRec;
else
label.frame = kLabelRect;
3項演算子の例。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.
Objective-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.
面白い事実、null / nilをチェックしたい場合は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]?: @"";
}
Objective-Cでは:
だからあなたが書くとしましょう:
[self getSomeString] != nil?: @"";
2番目のパラメーターはブール値を返すため、例外がスローされます。
これは、if / elseステートメントのような3項演算子です。
if(a > b) {
what to do;
}
else {
what to do;
}
三項演算子では、次のようになります。条件?条件がtrueの場合の処理:falseの場合の処理。
(a > b) ? what to do if true : what to do if false;
誰もが言及したように、それは条件付き演算子を表す方法です
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
の代わりに ?:
使用できる??
迅速です。