2012-01-17 11 views
49

Estoy programando en Objective-C para iOS. Me gustaría analizar un objeto de tipo NSString en un escalar de tipo BOOL.Cómo analizar NSString en BOOL en Objective-C?

Tengo un valor, y sé que será @ "SÍ" o @ "NO", pero ese valor SÍ (o) NO es NSString y solo quiero cambiar NSString en BOOL.

¿Cómo puedo hacer eso?

Por favor, respóndeme si lo sabes.

Gracias por leer.

Respuesta

141

creo que es la siguiente:

BOOL boolValue = [myString boolValue]; 
+0

Muchas gracias lo tengo. –

+0

¿cuál será el boolValue de "Abdul"? Por favor sugiérame –

+3

@ Abdul Yasin, será 0/falso. Este método solo es efectivo si sabe que hay un valor booleano en la cadena; p.ej. @ "1", @ "verdadero", @ "SÍ", etc. Aparte de estos, boolValue siempre devolverá 0; – x4h1d

2
if ([string isEqualToString: @"YES"]) 
    foo(); 
else 
    bar(); 
+0

LOL u me vencieron por 6 segundos! jaja – Steve

+1

Esa no es la forma correcta. Ver las otras dos respuestas de bschultz y Tommy. –

+0

Tim Toady dice lo contrario ;-) –

22

Probablemente debería utilizar NSString 's -boolValue. Para citar la documentación directamente:

[Devuelve el valor booleano del texto del receptor. Devuelve SÍ en encontrando uno de "Y", "y", "T", "t", o un dígito 1-9-el método ignora cualquier carácter final. Devuelve NO si el receptor no comienza con una representación de texto decimal válida de un número.

Eso parece coincidir con sus casos de entrada.

+0

Muchas gracias lo tengo. –

0

Esto probablemente lo mejor sería resuelto con un condicional, por ejemplo:

if ([myString isEqualToString:@"YES"]) 
    myBool = YES; 
else if ([myString isEqualToString:@"NO"]) 
    myBool = NO; 

Hope esto le ayudó, buena suerte con su programación.

+1

Esta solución está lejos de ser correcta. Existen numerosas maneras de almacenar un bool en una cadena, y esto solo maneja uno muy específico. ¿Por qué duplicar la funcionalidad de un método que ya está implementado? – FreeAsInBeer

+0

Esto es demasiado sucio. – AlKozin

0

Esta propiedad también debe devolver true si la cadena es 'verdadero' es por eso que creo que es necesaria la extensión ...

extension NSString{ 
var boolValueExtended: Bool { 
    get{ 
     return boolValue || 
      self.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet()).uppercaseString == "TRUE" 
    } 
} 

}