Wat betekent deze regel van de code?
label.frame = (inPseudoEditMode) ? kLabelIndentedRect : kLabelRect;
De ?
en :
Verwar me.
Antwoord 1, Autoriteit 100%
Dit is de C ternaire operator (objectief-c is een superset van c):
label.frame = (inPseudoEditMode) ? kLabelIndentedRect : kLabelRect;
is semantisch gelijk aan
if(inPseudoEditMode) {
label.frame = kLabelIndentedRect;
} else {
label.frame = kLabelRect;
}
De Ternaire met No Eerste Element (b.v. variable ?: anotherVariable
) betekent hetzelfde als (valOrVar != 0) ? valOrVar : anotherValOrVar
Antwoord 2, Autoriteit 42%
Het is de ternaire of voorwaardelijke operator. Het is basisvorm is:
condition ? valueIfTrue : valueIfFalse
waar de waarden alleen worden geëvalueerd als ze worden gekozen.
Antwoord 3, Autoriteit 13%
Simply, de logica zou
zijn
(condition) ? {code for YES} : {code for NO}
Antwoord 4, Autoriteit 8%
Gebouw op de uitstekende uitleg van Barry Wark …
Wat is zo belangrijk aan de ternaire operator is dat het op plaatsen kan worden gebruikt die een IF-anders niet kan. IE: in een parameter in een voorwaarde of methode.
[NSString stringWithFormat: @"Status: %@", (statusBool ? @"Approved" : @"Rejected")]
…wat een goed gebruik is voor preprocessorconstanten:
// in your pch file...
#define statusString (statusBool ? @"Approved" : @"Rejected")
// in your m file...
[NSString stringWithFormat: @"Status: %@", statusString]
Dit voorkomt dat u lokale variabelen moet gebruiken en vrijgeven in if-else-patronen. FTW!
Antwoord 5, autoriteit 4%
Dat is gewoon de gebruikelijke ternaire operator. Als het deel voor het vraagteken waar is, wordt het deel vóór de dubbele punt geëvalueerd en geretourneerd, anders wordt het deel na de dubbele punt geëvalueerd en geretourneerd.
a?b:c
is als
if(a)
b;
else
c;
Antwoord 6
Dit maakt deel uit van C, dus het is niet specifiek voor Objective-C. Hier is een vertaling in een if
-statement:
if (inPseudoEditMode)
label.frame = kLabelIndentedRec;
else
label.frame = kLabelRect;
Antwoord 7
Het is slechts een korte vorm van het schrijven van een if-then-else-statement. Het betekent hetzelfde als de volgende code:
if(inPseudoEditMode)
label.frame = kLabelIndentedRect;
else
label.frame = kLabelRect;
Antwoord 8
Ternaire operator voorbeeld.Als de waarde van isFemale
booleaanse variabele is JA, print “GENDER IS FEMALE” anders “GENDER IS
MAN”
? 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.
voor snel
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.
Antwoord 9
Fun feit, in objectieve-c als u NULL / NIL wilt controleren
Bijvoorbeeld:
-(NSString*) getSomeStringSafeCheck
{
NSString *string = [self getSomeString];
if(string != nil){
return String;
}
return @"";
}
De snelle manier om het te doen is:
-(NSString*) getSomeStringSafeCheck
{
return [self getSomeString] != nil ? [self getSomeString] : @"";
}
Dan kunt u het naar een eenvoudigste manier bijwerken:
-(NSString*) getSomeStringSafeCheck
{
return [self getSomeString]?: @"";
}
omdat in doelstelling-C:
- Als een object nihil is, zal het false terugkeren als Boolean;
- De tweede parameter van de ternaire operator kan leeg zijn, omdat deze het resultaat aan de linkerkant van ‘?’ teruggeeft
Dus stel dat je schrijft:
[self getSomeString] != nil?: @"";
de tweede parameter retourneert een booleaanse waarde, dus er wordt een uitzondering gegenereerd.
Antwoord 10
Het is een ternaire operator, zoals een if/else-statement.
if(a > b) {
what to do;
}
else {
what to do;
}
In ternaire operator is het zo:
voorwaarde ? wat te doen als de voorwaarde waar is: wat te doen als het niet waar is;
(a > b) ? what to do if true : what to do if false;
Antwoord 11
Ik heb net iets nieuws geleerd over de ternaire operator. De korte vorm die de middelste operand weglaat, is echt elegant en is een van de vele redenen waarom C relevant blijft. Ter info, ik heb dit voor het eerst echt begrepen in de context van een routine geïmplementeerd in C #, die ook de ternaire operator ondersteunt. Aangezien de ternaire operator in C staat, ligt het voor de hand dat het in andere talen zou zijn die in wezen extensies daarvan zijn (bijv. Objective-C, C#).
Antwoord 12
Zoals iedereen dat noemde, is het een manier om de voorwaardelijke operator weer te geven
if (condition){
true
}
else {
false
}
met behulp van ternaire operator (condition)? true:false
Om aanvullende informatie toe te voegen, hebben we snel een nieuwe manier om het weer te geven met behulp van ??
.
let imageObject: UIImage = (UIImage(named: "ImageName")) ?? (initialOfUsername.capitalizedString).imageFromString
Wat vergelijkbaar is met
int a = 6, c= 5;
if (a > c)
{
a is greater
} else {
c is greater
}
is gelijk aan
if (a>c)?a:c
==> Is gelijk aan if (a>c)?:c
in plaats van ?:
kunnen we gebruiken ??
is snel.
Antwoord 13
int padding = ([[UIScreen mainScreen] bounds].size.height <= 480) ? 15 : 55;
betekent
int padding;
if ([[UIScreen mainScreen] bounds].size.height <= 480)
padding = 15;
else
padding = 55;