このコード行はどういう意味ですか?
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}
Barry Warkの優れた説明に基づいて構築しています...
三項演算子について非常に重要なことは、それが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;
あなたが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番目のパラメータはブール値を返すため、例外がスローされます。
三項演算子の例。isF boolean変数の値が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.
スイフト用
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が依然として関連性がある多くの理由の1つです。参考までに、私は最初にC#で実装されたルーチンのコンテキストでこれに頭を悩ませました。それはまた三項演算子もサポートします。三項演算子がCにあるので、それが本質的にそれの拡張である他の言語になるであろうことは理に適っている(例えば、Objective-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;
誰もが言及したように、それは条件演算子を表す方法です
if (condition){
true
}
else {
false
}
三項演算子の使用(condition)? true:false
追加情報を追加するために、Swiftに??
を使用してそれを表す新しい方法があります。
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
と等しい
?:
の代わりに使用できる??
はSwiftです。
If/else文のように、これは三項演算子です。
if(a > b) {
what to do;
}
else {
what to do;
}
三項演算子では、次のようになります。条件が真の場合にどうするか:それが偽の場合にどうするか。
(a > b) ? what to do if true : what to do if false;