objective c - recomendada - ¿Cuál es la diferencia entre @ YES/@ NO y YES/NO?
parejas con diferencia de edad de 20 años (3)
En Objective-c, ¿cuál es la diferencia entre @YES
/ @NO
y YES
/ NO
? ¿Qué tipos se utilizan para cada uno?
@ SÍ / @ NO es un tipo de
NSNumber
, se usa cuando se hace algo con el objeto Foundation. Por ejemploNSMutableArray * array = [[NSMutableArray alloc] init]; [array addObject:@YES];//true [array addObject:YES];//Wrong
SÍ / NO es
BOOLs
La diferencia es que al usar @
estás creando una instancia de NSNumber
, por lo tanto un objeto. Yes
y No
son simplemente valores booleanos primitivos, no objetos.
El @
es un tipo de acceso directo literal para crear un objeto, también lo tiene en cadenas @"something"
, diccionarios @{"key": object}
, matrices: @[object,...]
y números: @0,@1...@345
o expresiones @(3*2)
.
Es importante comprender que cuando tiene un objeto como NSNumber
no puede realizar operaciones matemáticas básicas (en obj-c) como sumar o multiplicar, primero debe volver al valor primitivo utilizando métodos como: - integerValue , -BoolValue , -floatValue etc.
Probablemente lo viste porque los tipos de colección de base solo funcionan con objetos, por lo que si necesitas poner una serie de bools dentro de un NSArray
, debes convertirlo en objeto.
@YES
es una forma corta de [NSNumber numberWithBool:YES]
Y
@NO
es una forma corta de [NSNumber numberWithBool:NO]
y si escribimos
if(@NO)
some statement;
la instrucción if anterior se ejecutará ya que la instrucción anterior será
if([NSNumber numberWithBool:NO] != nil)
y no es igual a nil
por lo que será true
y, por lo tanto, pasará.
Mientras que YES
y NO
son simplemente BOOL''s
y se definen como
#define YES (BOOL)1
#define NO (BOOL)0
YES
y NO
es igual que true
y false
, 1
y 0
respectivamente, y puede usar 1
y 0
lugar de YES
y NO
, pero en lo que respecta a la legibilidad, YES
y NO
definitivamente se preferirán.