Was bedeutet diese Codezeile?
label.frame = (inPseudoEditMode) ? kLabelIndentedRect : kLabelRect;
Das ?
und :
verwirren mich.
objective-c
c
syntax
operators
conditional-operator
Danielreiser
quelle
quelle
variable ?: anotherVariable
, was bedeutet das? '(valOrVar != 0) ? valOrVar : anotherValorvar
Antworten:
Dies ist der ternäre Operator C (Objective-C ist eine Obermenge von C):
ist semantisch äquivalent zu
Das ternäre ohne erstes Element (zB
variable ?: anotherVariable
) bedeutet dasselbe wie(valOrVar != 0) ? valOrVar : anotherValOrVar
quelle
?:
) in Situationen, in denen die linke Seite ein Ausdruck ist, noch besser ist, da dies?:
verhindert, dass er mehr als einmal ausgewertet wird. Beispiel:[myArray firstObject] ? [myArray firstObject] : @"Hello World";
RuftfirstObject
zweimal auf (wennfirstObject
nicht zurückgegebennil
), wobei[myArray firstObject] ?: @"Hello World";
das gleiche Ergebnis erzielt wird, jedoch niefirstObject
mehr als einmal aufgerufen wird.?:
auch als Elvis-Operator bezeichnet wird . Und natürlich ist es in diesem Fall, wenn wir ein Element löschen, kein ternärer Operator mehr, sondern ein binärer Operator . Binäre Operatoren umfassen die überwiegende Mehrheit der Betreiber wir in der Regel verwenden , bei der Programmierung ( , , , , , , , , etc.).*
+
-
^
|
||
&
>>
Es ist der ternäre oder bedingte Operator. Die Grundform ist:
Wobei die Werte nur ausgewertet werden, wenn sie ausgewählt werden.
quelle
condition ? codeIfTrue : codeIfFalse
Einfach wäre die Logik
(condition) ? {code for YES} : {code for NO}
quelle
Aufbauend auf Barry Warks hervorragender Erklärung ...
Was am ternären Operator so wichtig ist, ist, dass er an Orten verwendet werden kann, die ein Wenn-Sonst nicht kann. dh: Innerhalb einer Bedingung oder eines Methodenparameters.
... was eine großartige Verwendung für Präprozessorkonstanten ist:
Dies erspart Ihnen die Verwendung und Freigabe lokaler Variablen in if-else-Mustern. FTW!
quelle
Das ist nur der übliche ternäre Operator . Wenn der Teil vor dem Fragezeichen wahr ist, wird der Teil vor dem Doppelpunkt ausgewertet und zurückgegeben, andernfalls wird der Teil nach dem Doppelpunkt ausgewertet und zurückgegeben.
ist wie
quelle
Dies ist Teil von C, daher ist es nicht Objective-C-spezifisch. Hier ist eine Übersetzung in eine
if
Aussage:quelle
Es ist nur eine kurze Form des Schreibens einer Wenn-Dann-Sonst-Aussage. Dies bedeutet dasselbe wie der folgende Code:
quelle
Ziel c
Für Swift
quelle
Unterhaltsame Tatsache, in Ziel-c, wenn Sie null / null überprüfen möchten. Zum Beispiel:
Der schnelle Weg dazu ist:
Dann können Sie es auf einfachste Weise aktualisieren:
Denn in Objective-C:
Nehmen wir also an, Sie schreiben:
Der zweite Parameter gibt einen booleschen Wert zurück, daher wird eine Ausnahme ausgelöst.
quelle
Es ist ein ternärer Operator wie eine if / else-Anweisung.
Im ternären Operator ist es so: Bedingung? Was tun, wenn die Bedingung erfüllt ist? Was tun, wenn die Bedingung falsch ist?
quelle
Ich habe gerade etwas Neues über den ternären Operator gelernt. Die Kurzform, in der der mittlere Operand weggelassen wird, ist wirklich elegant und einer der vielen Gründe, warum C relevant bleibt. Zu Ihrer Information, ich habe mich zuerst im Rahmen einer in C # implementierten Routine, die auch den ternären Operator unterstützt, wirklich damit beschäftigt. Da sich der ternäre Operator in C befindet, liegt es nahe, dass es sich um andere Sprachen handelt, die im Wesentlichen Erweiterungen davon sind (z. B. Objective-C, C #).
quelle
Wie alle darauf hingewiesen haben, ist dies eine Möglichkeit, bedingte Operatoren darzustellen
Verwenden des ternären Operators
(condition)? true:false
Um zusätzliche Informationen hinzuzufügen, haben wir in Kürze eine neue Art der Darstellung mit??
.Welches ist ähnlich zu
ist äquivalent zu
if (a>c)?a:c
==> Ist gleichif (a>c)?:c
anstatt
?:
wir verwenden können??
ist schnell.quelle
meint
quelle