Domanda veloce: è possibile trasmettere un NSInteger a un oggetto NSNumber? Devo convertire il tag di un oggetto UIImageView in un oggetto NSNumber perché devo passarlo come argomento a una funzione.È possibile trasmettere un NSInteger a NSNumber?
risposta
Non è possibile cast perché NSInteger
non è un oggetto, solo un alias per un tipo predefinito. È sempre possibile creare un nuovo NSNumber
oggetto dal NSInteger
, come questo:
NSNumber *myNum = @(myNsIntValue);
o nella versione precedente del compilatore, usare
NSNumber *myNum = [NSNumber numberWithInteger:myNsIntValue];
Questa risposta genera un avviso sui nuovi dispositivi a 64 bit. Per favore vedi la risposta più precisa di Kevin qui sotto. –
@FullDecent Modificato, grazie! – dasblinkenlight
Questa è la risposta più corretta e non produrrà inaspettata errore.
NSNumber *myNum = [NSNumber numberWithInteger:myNsIntValue];
Poiché il documento detto:
"numberWithInteger:. crea e restituisce un oggetto NSNumber contenente un determinato valore, trattandolo come NSInteger"
"numberWithInt: Crea e restituisce un oggetto NSNumber che contiene un valore dato, trattandolo come int firmato".
dal Apple LLVM Compiler 4.0
, c'è un modo più semplice per creare NSNumber
oggetto:
NSNumber *x = @1234;
NSNumber *y = @(anIntegerVariable);
NSNumero * z = @ (aDoubleValue); funziona altrettanto bene. – gnasher729
E 'assolutamente possibile dare uno NSInteger a un NSNumber *. Il risultato molto probabilmente porterà ad un incidente. Naturalmente se hai un numero x, puoi usare @ (x) per creare un oggetto NSNumber con il valore x. Che funzionerà, ma non è un cast. – gnasher729