Que signifie cette ligne de code?
label.frame = (inPseudoEditMode) ? kLabelIndentedRect : kLabelRect;
Le ?
et :
me confondre.
objective-c
c
syntax
operators
conditional-operator
danielreiser
la source
la source
variable ?: anotherVariable
, qu'est-ce que cela signifie?(valOrVar != 0) ? valOrVar : anotherValorvar
Réponses:
Il s'agit de l' opérateur ternaire C (Objective-C est un surensemble de C):
est sémantiquement équivalent à
Le ternaire sans premier élément (par exemple
variable ?: anotherVariable
) signifie la même chose que(valOrVar != 0) ? valOrVar : anotherValOrVar
la source
?:
) est encore meilleur dans les situations où le côté gauche est une expression, car cela l'?:
empêche d'être évalué plus d'une fois. Par exemple:[myArray firstObject] ? [myArray firstObject] : @"Hello World";
appellefirstObject
deux fois (sifirstObject
ne revient pasnil
), où[myArray firstObject] ?: @"Hello World";
produit le résultat identique mais n'appelle jamaisfirstObject
plus d'une fois.?:
est également appelé l' opérateur Elvis en raison de la ressemblance des emoji avec le chanteur. Et bien sûr, dans ce cas, comme nous supprimons un élément, il ne s'agit plus d'un opérateur ternaire mais d'un opérateur binaire . Les opérateurs binaires comprennent la grande majorité des opérateurs que nous utilisons habituellement lors de la programmation (*
,+
,-
,^
,|
,||
,&
,>>
, etc.).C'est l'opérateur ternaire ou conditionnel. Sa forme de base est:
Où les valeurs ne seront évaluées que si elles sont choisies.
la source
condition ? codeIfTrue : codeIfFalse
Simplement, la logique serait
(condition) ? {code for YES} : {code for NO}
la source
S'appuyant sur l'excellente explication de Barry Wark ...
Ce qui est si important à propos de l'opérateur ternaire, c'est qu'il peut être utilisé dans des endroits où un if-else ne peut pas. ie: à l'intérieur d'un paramètre de condition ou de méthode.
... ce qui est très utile pour les constantes de préprocesseur:
Cela vous évite d'avoir à utiliser et à libérer des variables locales dans les modèles if-else. FTW!
la source
C'est juste l' opérateur ternaire habituel . Si la partie avant le point d'interrogation est vraie, elle évalue et renvoie la partie avant les deux points, sinon elle évalue et renvoie la partie après les deux points.
est comme
la source
Cela fait partie de C, donc ce n'est pas spécifique à Objective-C. Voici une traduction en une
if
déclaration:la source
C'est juste une forme courte d'écriture d'une instruction if-then-else. Cela signifie la même chose que le code suivant:
la source
Objectif c
Pour Swift
la source
Fait amusant, dans objective-c si vous voulez vérifier null / nil Par exemple:
Le moyen rapide de le faire est:
Ensuite, vous pouvez le mettre à jour de la manière la plus simple:
Parce que dans Objective-C:
Alors disons que vous écrivez:
le deuxième paramètre renvoie une valeur booléenne, donc une exception est levée.
la source
Il s'agit d'un opérateur ternaire, comme une instruction if / else.
En opérateur ternaire c'est comme ça: condition? que faire si la condition est vraie: que faire si elle est fausse;
la source
Je viens d'apprendre quelque chose de nouveau sur l'opérateur ternaire. La forme courte qui omet l'opérande du milieu est vraiment élégante et est l'une des nombreuses raisons pour lesquelles C reste pertinent. Pour info, j'ai d'abord vraiment compris ce sujet dans le contexte d'une routine implémentée en C #, qui prend également en charge l'opérateur ternaire. Puisque l'opérateur ternaire est en C, il va de soi que ce serait dans d'autres langages qui en sont essentiellement des extensions (par exemple, Objective-C, C #).
la source
Comme tout le monde l'a mentionné, c'est une façon de représenter l'opérateur conditionnel
en utilisant l'opérateur ternaire
(condition)? true:false
Pour ajouter des informations supplémentaires, En rapide nous avons une nouvelle façon de le représenter en utilisant??
.Qui est similaire à
est équivalent à
if (a>c)?a:c
==> Est égal àif (a>c)?:c
au lieu de
?:
nous pouvons utiliser??
est rapide.la source
veux dire
la source