Bu kod satırı ne anlama geliyor?
label.frame = (inPseudoEditMode) ? kLabelIndentedRect : kLabelRect;
?
Ve :
beni karıştırmayın.
variable ?: anotherVariable
, bu ne anlama geliyor? '
(valOrVar != 0) ? valOrVar : anotherValorvar
Bu kod satırı ne anlama geliyor?
label.frame = (inPseudoEditMode) ? kLabelIndentedRect : kLabelRect;
?
Ve :
beni karıştırmayın.
variable ?: anotherVariable
, bu ne anlama geliyor? '
(valOrVar != 0) ? valOrVar : anotherValorvar
Yanıtlar:
Bu C üçlü operatörüdür (Objective-C, C'nin bir üst kümesidir):
label.frame = (inPseudoEditMode) ? kLabelIndentedRect : kLabelRect;
anlamsal olarak eşdeğerdir
if(inPseudoEditMode) {
label.frame = kLabelIndentedRect;
} else {
label.frame = kLabelRect;
}
İlk elemanı olmayan üçlü (örn. variable ?: anotherVariable
),(valOrVar != 0) ? valOrVar : anotherValOrVar
?:
) içermeyen üçlü operatörün , sol tarafın bir ifade olduğu durumlarda daha iyi olduğunu belirtmek gerekir , çünkü ?:
birden fazla değerlendirilmesini engeller. Örneğin: iki kez [myArray firstObject] ? [myArray firstObject] : @"Hello World";
çağrı yapar firstObject
( firstObject
geri dönmezse nil
), burada [myArray firstObject] ?: @"Hello World";
aynı sonucu üretir ancak asla bir firstObject
defadan fazla çağrılamaz.
?:
olarak da adlandırıldığını eklemek istersiniz . Ve elbette bu durumda bir öğeyi düşürdüğümüzde, artık üçlü bir operatör değil, ikili bir operatör . İkili operatörler programlarken biz genellikle (kullanma operatörlerin büyük çoğunluğu dahil , , , , , , , , vs). *
+
-
^
|
||
&
>>
Basitçe, mantık
(condition) ? {code for YES} : {code for NO}
Barry Wark'ın mükemmel açıklaması üzerine inşa ...
Üçlü operatör için bu kadar önemli olan şey, if-else'in yapamayacağı yerlerde kullanılabilmesidir. ie: Bir koşul veya yöntem parametresinin içinde.
[NSString stringWithFormat: @"Status: %@", (statusBool ? @"Approved" : @"Rejected")]
... önişlemci sabitleri için büyük bir kullanımdır:
// in your pch file...
#define statusString (statusBool ? @"Approved" : @"Rejected")
// in your m file...
[NSString stringWithFormat: @"Status: %@", statusString]
Bu, if-else kalıplarında yerel değişkenleri kullanmak ve serbest bırakmak zorunda kalmamanızı sağlar. FTW!
Bu sadece olağan üçlü operatör . Soru işaretinden önceki bölüm doğruysa, iki nokta üst üste işaretini değerlendirir ve iki nokta üst üste işaretinden sonraki bölümü döndürür.
a?b:c
gibi
if(a)
b;
else
c;
Bu C'nin bir parçasıdır, bu nedenle Objective-C'ye özgü değildir. İşte if
ifadeye bir çeviri :
if (inPseudoEditMode)
label.frame = kLabelIndentedRec;
else
label.frame = kLabelRect;
Bu, if-then-else deyimi yazmanın kısa bir biçimidir. Aşağıdaki kodla aynı anlama gelir:
if(inPseudoEditMode)
label.frame = kLabelIndentedRect;
else
label.frame = kLabelRect;
Üçlü işleç örneği. İsFemale boolean değişkeninin değeri EVET ise, "CİNSİYET KADIN" aksi takdirde "CİNSİYET ERKEK" yazdırabilirsiniz
? 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 için
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.
Eğlenceli gerçek, null / nil değerini kontrol etmek istiyorsanız obj-c'de Örneğin:
-(NSString*) getSomeStringSafeCheck
{
NSString *string = [self getSomeString];
if(string != nil){
return String;
}
return @"";
}
Bunu yapmanın hızlı yolu:
-(NSString*) getSomeStringSafeCheck
{
return [self getSomeString] != nil ? [self getSomeString] : @"";
}
Ardından en basit şekilde güncelleyebilirsiniz:
-(NSString*) getSomeStringSafeCheck
{
return [self getSomeString]?: @"";
}
Çünkü Objective-C'de:
Diyelim ki yazıyorsunuz:
[self getSomeString] != nil?: @"";
ikinci parametre bir boole değeri döndürüyor, bu nedenle bir istisna atılıyor.
Üçlü işleç, if / else deyimi gibi.
if(a > b) {
what to do;
}
else {
what to do;
}
Üçlü operatörde durum şöyledir: koşul doğruysa ne yapmalı: yanlışsa ne yapmalı;
(a > b) ? what to do if true : what to do if false;
Üçlü operatör hakkında yeni bir şey öğrendim. Orta işleneni atlayan kısa form gerçekten zariftir ve C'nin alakalı kalmasının birçok nedeninden biridir. FYI, ilk olarak C # 'da uygulanan rutin bağlamında başımı gerçekten ele aldım. Üçlü operatör C'de olduğundan, esasen onun uzantısı olan diğer dillerde olması mantıklıdır (örneğin, Objective-C, C #).
Herkesin belirttiği gibi, koşullu operatörü temsil etmenin bir yoludur
if (condition){
true
}
else {
false
}
üçlü operatör kullanma (condition)? true:false
Ek bilgi eklemek için, hızlı bir şekilde bunu kullanarak temsil etmenin yeni bir yoluna sahibiz ??
.
let imageObject: UIImage = (UIImage(named: "ImageName")) ?? (initialOfUsername.capitalizedString).imageFromString
Hangisine benzer
int a = 6, c= 5;
if (a > c)
{
a is greater
} else {
c is greater
}
eşittir
if (a>c)?a:c
==> eşittir if (a>c)?:c
yerine ?:
kullanabileceğimiz ??
hızlı.