Wat betekent het vraagteken en de dikke darm (?: Ternary-operator) in doelstelling-C?

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:

  1. Als een object nihil is, zal het false terugkeren als Boolean;
  2. 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; 

Other episodes