Ho lavorato a un progetto iOS da qualche tempo e di recente ho deciso di portare il codice su un progetto Mac. Poiché ho scelto di utilizzare NSInteger nel mio codice e NSInteger è un typecast dipendente dall'ambiente, significa che le mie variabili sono di diverso tipo nelle app iOS e Mac.Quando si passa a Mac da iOS nello sviluppo Objective-C, NSIntegers fornisce errori di corrispondenza di tipo
Quando eseguo la suite di test su Mac, tutte le mie STAssertEquals le chiamate con l'errore "Tipo non corrispondente -" perché i tipi non corrispondono:
NSInteger foo = 1;
STAssertEquals(foo, 1, nil); // Test fails!!
Typecasting miei scalari sembra funzionare, ma questo sembra davvero disordinato:
NSInteger foo = 1;
STAssertEquals(foo, (NSInteger)1, nil); // Succeeds, but is ugly!!
Mi manca qualcosa qui? Sto iniziando a sospettare che la decisione di utilizzare NSIntegers sia stata una scelta sbagliata.
Aggiornamento: Forse this article è correlato. Sembra supportare gli scalari di typecasting.
Vorrei assumere la seguente idea sarebbe quasi certamente male, ma ho pensato di chiedere : Esiste un modo per forzare il compilatore a trattare scalari non tipizzati come "1" come NSIntegers? –
Non ci credo. Il compilatore promuoverà una costante di interi considerevolmente grande per un (firmato lungo) o (firmato lungo lungo), ma non credo che ci sia un modo per ottenere questo comportamento gratuitamente (anche se ci fosse, probabilmente non vorresti fare quello :)) – iccir