Bir tamsayı dizisi yapmak istiyorsanız, NSInteger kullanabilir misiniz? NSNumber kullanmak zorunda mısınız? Öyleyse neden?
Yanıtlar:
Eski, düz bir C dizisi kullanabilirsiniz:
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]);
Veya bir NSArrayveya kullanabilirsiniz NSMutableArray, ancak burada bir NSNumberörnek içindeki her tamsayıyı sarmalamanız gerekir (çünkü NSArraynesneler sınıf örneklerini tutacak şekilde tasarlanmıştır).
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]);
NSArrayeminim performansın çarptığını hissetmeyeceksiniz.
C dizisi:
NSInteger array[6] = {1, 2, 3, 4, 5, 6};
Objective-C Dizisi:
NSArray *array = @[@1, @2, @3, @4, @5, @6];
// numeric values must in that case be wrapped into NSNumbers
Swift Dizisi:
var array = [1, 2, 3, 4, 5, 6]
Bu da doğrudur:
var array = Array(1...10)
Not: diziler Swift'de güçlü bir şekilde yazılmıştır; bu durumda, derleyici, dizinin bir tamsayı dizisi olduğunu içerikten çıkarır. Bu açık tür sözdizimini de kullanabilirsiniz:
var array: [Int] = [1, 2, 3, 4, 5, 6]
Bir dizi Çift istiyorsanız, şunu kullanırsınız:
var array = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0] // implicit type-inference
veya:
var array: [Double] = [1, 2, 3, 4, 5, 6] // explicit type
Bir NSArray kullanmak istiyorsanız, içine koymak için bir Objective-C sınıfına ihtiyacınız vardır - dolayısıyla NSNumber gereksinimi.
Bununla birlikte, Obj-C hala C'dir, bu nedenle normal C dizilerini kullanabilir ve gerekirse NSNumber yerine normal girişleri tutabilirsiniz.
NSArray yerine CFArray kullanabilirsiniz . İşte nasıl yapılacağını açıklayan bir makale.
CFMutableArrayRef ar = CFArrayCreateMutable(NULL, 0, NULL);
for (NSUInteger i = 0; i < 1000; i++)
{
CFArrayAppendValue(ar, (void*)i);
}
CFRelease(ar); /* Releasing the array */
Aynısı diğer kapsayıcıların CoreFoundation sürümü için de geçerlidir.
Daha rahat kullanmak için eski güzel C dizisinin etrafında basit bir Objective C sarıcı oluşturdum: https://gist.github.com/4705733
Tam sayılarınızın sırası gerekli değilse ve yalnızca benzersiz değerler varsa
NSIndexSet veya NSMutableIndexSet'i de kullanabilirsiniz Tam sayıları kolayca ekleyip kaldırabilir veya dizinizin bir tamsayı içerip içermediğini kontrol edebilirsiniz.
- (void)addIndex:(NSUInteger)index
- (void)removeIndex:(NSUInteger)index
- (BOOL)containsIndexes:(NSIndexSet *)indexSet
Daha fazla bilgi için belgelere bakın.
NSSet(ve bir içine sarılmış tamsayıların kullanılması) nesi yanlış NSNumber?
NSNumbers kullanmanın çok daha kolay olduğunu düşünüyorum. Tek yapmanız gereken bu:
NSNumber *myNum1 = [NSNumber numberWithInt:myNsIntValue1];
NSNumber *myNum2 = [NSNumber numberWithInt:myNsIntValue2];
.
.
.
NSArray *myArray = [NSArray arrayWithObjects: myNum1, myNum2, ..., nil];
forSayılar için veya sadece başka bir dizi kullanabilirsiniz ve sonra arrayWithArray.