NSInteger restituisce 0 se NSString è NULL
-
13-12-2019 - |
Domanda
Questa potrebbe essere la più semplice, ma io non sono in grado di trovare la causa esatta.Invece di spiegare in parole che segue è il mio codice:
NSString *str = @"";
NSInteger tempInteger = [str integerValue];
if (tempInteger == 0)
{
NSLog (@"do something");
}
Se NSString
di ritorno NULL
quindi NSInteger
restituisce 0 se NSString
ha un certo valore, quindi NSInteger
tornando stesso valore.
Ma quando NSString
è NULL
poi voglio NSInteger
dovrebbe tornare NULL
non è 0, ma io non sono in grado di convalida NSInteger
come NULL
.
Come posso ottenere il NULL
valore in NSInteger
se NSString
è NULLO?
Soluzione
NULL
è un puntatore;NSInteger è un C primitiva che può contenere solo numeri.Non è possibile che un NSInteger mai NULL
.(Nota a margine:quando si parla di Objective-C puntatori a oggetti, usiamo nil
piuttosto che NULL
.)
Invece, se si desidera gestire solo i casi in cui il valore intero è 0, ma la stringa non è NULL
, si dovrebbe cambiare la vostra condizione come segue:
if (tempInteger == 0 && str != nil)
Tuttavia, nel tuo caso, la stringa non è nil
;si tratta semplicemente di un inesistente-ma vuoto--stringa.Se si desidera verificare anche che la tua condizione potrebbe diventare:
if (tempInteger == 0 && [str length] > 0)
Questa verifica entrambi i casi a causa di un nil
stringa di ritorno lunghezza 0
.(In realtà, qualsiasi metodo inviato a nil
tornerà 0
, nil
, 0.0
, etc.a seconda del tipo di ritorno.)
Altri suggerimenti
In realtà è possibile implementare una logica come questa:
- .
- Controlla se la tua stringa è davvero un intero
- prova a convertirlo
- Se è uguale a 0 fare qualcosa
Qualcosa come questo farebbe il trucco:
NSString *str = @"";
NSInteger tempInteger = [str integerValue];
NSCharacterSet *cs = [NSCharacterSet decimalDigitCharacterSet];
BOOL safe = [cs isSupersetOfSet:[NSCharacterSet characterSetWithCharactersInString:str]] && str.length > 0;
if (safe && tempInteger == 0)
{
NSLog (@"do something");
}
.Un numero intero può contenere solo numeri e non valore nullo.In questo caso dovresti prima controllare la lunghezza della stringa per verificare se è null
NSInteger
è un tipo di variabile scalare.Il valore NULL
(in realtà nil
in ObjectiveC), indicando un puntatore verso l'indirizzo 0
, quando il cast su un NSinteger sarà 0
.
Per realizzare il tuo compito, dovrai confrontare NSString
contro nil
prima di convertirlo verso un intero.
if (str == nil)
{
//our string is invalid
}
else
{
tempInteger = [str integerValue];
}
.