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];//WrongSÍ / 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.