Jika Anda ingin membuat array bilangan bulat, dapatkah Anda menggunakan NSInteger? Apakah Anda harus menggunakan NSNumber? Jika ya, lalu mengapa?
Jika Anda ingin membuat array bilangan bulat, dapatkah Anda menggunakan NSInteger? Apakah Anda harus menggunakan NSNumber? Jika ya, lalu mengapa?
Jawaban:
Anda dapat menggunakan array C lama biasa:
NSInteger myIntegers[40];
for (NSInteger i = 0; i < 40; i++)
myIntegers[i] = i;
// to get one of them
NSLog (@"The 4th integer is: %d", myIntegers[3]);
Atau, Anda dapat menggunakan NSArray
atau NSMutableArray
, tetapi di sini Anda perlu menggabungkan setiap bilangan bulat di dalam sebuah NSNumber
instance (karena NSArray
objek dirancang untuk menampung instance kelas).
NSMutableArray *myIntegers = [NSMutableArray array];
for (NSInteger i = 0; i < 40; i++)
[myIntegers addObject:[NSNumber numberWithInteger:i]];
// to get one of them
NSLog (@"The 4th integer is: %@", [myIntegers objectAtIndex:3]);
// or
NSLog (@"The 4th integer is: %d", [[myIntegers objectAtIndex:3] integerValue]);
NSArray
, saya yakin Anda tidak akan merasakan kinerja yang sukses.
Array C:
NSInteger array[6] = {1, 2, 3, 4, 5, 6};
Larik Objective-C:
NSArray *array = @[@1, @2, @3, @4, @5, @6];
// numeric values must in that case be wrapped into NSNumbers
Swift Array:
var array = [1, 2, 3, 4, 5, 6]
Ini juga benar:
var array = Array(1...10)
NB: array sangat diketik di Swift; dalam hal ini, kompilator menyimpulkan dari konten bahwa array adalah array bilangan bulat. Anda juga dapat menggunakan sintaks tipe eksplisit ini:
var array: [Int] = [1, 2, 3, 4, 5, 6]
Jika Anda menginginkan array Ganda, Anda akan menggunakan:
var array = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0] // implicit type-inference
atau:
var array: [Double] = [1, 2, 3, 4, 5, 6] // explicit type
Jika Anda ingin menggunakan NSArray, Anda memerlukan kelas Objective-C untuk dimasukkan ke dalamnya - karenanya persyaratan NSNumber.
Yang mengatakan, Obj-C masih C, jadi Anda dapat menggunakan array C biasa dan menyimpan int biasa daripada NSNumbers jika perlu.
Anda dapat menggunakan CFArray sebagai pengganti NSArray. Berikut adalah artikel yang menjelaskan caranya.
CFMutableArrayRef ar = CFArrayCreateMutable(NULL, 0, NULL);
for (NSUInteger i = 0; i < 1000; i++)
{
CFArrayAppendValue(ar, (void*)i);
}
CFRelease(ar); /* Releasing the array */
Hal yang sama juga berlaku untuk versi CoreFoundation dari penampung lain.
Saya membuat pembungkus Objective C sederhana di sekitar array C lama yang bagus untuk digunakan dengan lebih nyaman: https://gist.github.com/4705733
Jika urutan bilangan bulat Anda tidak diperlukan, dan jika hanya ada nilai unik
Anda juga dapat menggunakan NSIndexSet atau NSMutableIndexSet Anda akan dapat dengan mudah menambah dan menghapus integer, atau memeriksa apakah array Anda berisi integer dengan
- (void)addIndex:(NSUInteger)index
- (void)removeIndex:(NSUInteger)index
- (BOOL)containsIndexes:(NSIndexSet *)indexSet
Lihat dokumentasi untuk info lebih lanjut.
NSSet
(dan menggunakan integer yang dibungkus dengan sebuah NSNumber
)?
Saya pikir jauh lebih mudah menggunakan NSNumbers. Ini yang perlu Anda lakukan:
NSNumber *myNum1 = [NSNumber numberWithInt:myNsIntValue1];
NSNumber *myNum2 = [NSNumber numberWithInt:myNsIntValue2];
.
.
.
NSArray *myArray = [NSArray arrayWithObjects: myNum1, myNum2, ..., nil];
for
atau hanya larik lain untuk angka, lalu arrayWithArray
.