¿Qué significa esta línea de código?
label.frame = (inPseudoEditMode) ? kLabelIndentedRect : kLabelRect;
El ?
y :
me confunden.
objective-c
c
syntax
operators
conditional-operator
danielreiser
fuente
fuente
variable ?: anotherVariable
, ¿qué significa esto?(valOrVar != 0) ? valOrVar : anotherValorvar
Respuestas:
Este es el operador ternario C (Objective-C es un superconjunto de C):
es semánticamente equivalente a
El ternario sin primer elemento (p
variable ?: anotherVariable
. Ej. ) Significa lo mismo que(valOrVar != 0) ? valOrVar : anotherValOrVar
fuente
?:
) es aún mejor en situaciones en las que el lado izquierdo es una expresión, ya que?:
evita que se evalúe más de una vez. Por ejemplo:[myArray firstObject] ? [myArray firstObject] : @"Hello World";
llamafirstObject
dos veces (sifirstObject
no regresanil
), donde[myArray firstObject] ?: @"Hello World";
produce el resultado idéntico pero nunca llamafirstObject
más de una vez.?:
también se llama operador Elvis debido a la semejanza emoji con el cantante. Y, por supuesto, en este caso, ya que estamos eliminando un elemento, ya no es un operador ternario sino un operador binario . Los operadores binarios incluyen la gran mayoría de los operadores que suelen utilizar al programar (*
,+
,-
,^
,|
,||
,&
,>>
, etc).Es el operador ternario o condicional. Su forma básica es:
Donde los valores solo se evaluarán si se eligen.
fuente
condition ? codeIfTrue : codeIfFalse
Simplemente, la lógica sería
(condition) ? {code for YES} : {code for NO}
fuente
Sobre la base de la excelente explicación de Barry Wark ...
Lo que es tan importante sobre el operador ternario es que se puede usar en lugares que un if-else no puede. es decir: dentro de un parámetro de condición o método.
... que es un gran uso para las constantes del preprocesador:
Esto le ahorra tener que usar y liberar variables locales en patrones if-else. FTW!
fuente
Ese es solo el operador ternario habitual . Si la parte anterior al signo de interrogación es verdadera, evalúa y devuelve la parte anterior a los dos puntos; de lo contrario, evalúa y devuelve la parte posterior a los dos puntos.
es como
fuente
Esto es parte de C, por lo que no es específico de Objective-C. Aquí hay una traducción en una
if
declaración:fuente
Es solo una forma corta de escribir una declaración if-then-else. Significa lo mismo que el siguiente código:
fuente
C objetivo
Para Swift
fuente
Dato curioso, en el objetivo-c si desea marcar nulo / nulo Por ejemplo:
La forma rápida de hacerlo es:
Luego puede actualizarlo de la manera más simple:
Porque en Objective-C:
Así que digamos que escribes:
el segundo parámetro devuelve un valor booleano, por lo tanto, se genera una excepción.
fuente
Es un operador ternario, como una declaración if / else.
En operador ternario es así: ¿condición? qué hacer si la condición es verdadera: qué hacer si es falsa;
fuente
Acabo de aprender algo nuevo sobre el operador ternario. La forma corta que omite el operando del medio es verdaderamente elegante, y es una de las muchas razones por las que C sigue siendo relevante. Para su información, primero entendí realmente esto en el contexto de una rutina implementada en C #, que también es compatible con el operador ternario. Dado que el operador ternario está en C, es lógico pensar que estaría en otros lenguajes que son esencialmente extensiones del mismo (por ejemplo, Objective-C, C #).
fuente
Como todos lo mencionaron, es una forma de representar operador condicional
usando el operador ternario
(condition)? true:false
Para agregar información adicional, en swift tenemos una nueva forma de representarlo usando??
.Que es similar a
es equivalente a
if (a>c)?a:c
==> es igual aif (a>c)?:c
en lugar de
?:
que podamos usar??
es rápido.fuente
medio
fuente