정수 배열을 만들고 싶다면 NSInteger를 사용할 수 있습니까? NSNumber를 사용해야합니까? 그렇다면 그 이유는 무엇입니까?
정수 배열을 만들고 싶다면 NSInteger를 사용할 수 있습니까? NSNumber를 사용해야합니까? 그렇다면 그 이유는 무엇입니까?
답변:
일반 오래된 C 배열을 사용할 수 있습니다.
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]);
또는, 당신은 사용할 수 있습니다 NSArray또는 NSMutableArray, 그러나 여기에서 당신은 내부의 각 정수를 마무리해야합니다 NSNumber(때문에 예를 NSArray객체가 보류 클래스 인스턴스로 설계되어 있습니다).
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되므로 성능 저하를 느끼지 못할 것입니다.
C 어레이 :
NSInteger array[6] = {1, 2, 3, 4, 5, 6};
Objective-C 어레이 :
NSArray *array = @[@1, @2, @3, @4, @5, @6];
// numeric values must in that case be wrapped into NSNumbers
스위프트 어레이 :
var array = [1, 2, 3, 4, 5, 6]
이것도 정확합니다.
var array = Array(1...10)
주의 : 배열은 Swift에서 강력하게 입력됩니다. 이 경우 컴파일러는 배열이 정수 배열임을 콘텐츠에서 유추합니다. 이 명시 적 유형 구문도 사용할 수 있습니다.
var array: [Int] = [1, 2, 3, 4, 5, 6]
Double 배열을 원하면 다음을 사용합니다.
var array = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0] // implicit type-inference
또는:
var array: [Double] = [1, 2, 3, 4, 5, 6] // explicit type
NSArray 대신 CFArray 를 사용할 수 있습니다 . 여기에 방법을 설명하는 문서입니다.
CFMutableArrayRef ar = CFArrayCreateMutable(NULL, 0, NULL);
for (NSUInteger i = 0; i < 1000; i++)
{
CFArrayAppendValue(ar, (void*)i);
}
CFRelease(ar); /* Releasing the array */
다른 컨테이너의 CoreFoundation 버전에도 동일하게 적용됩니다.
더 편리하게 사용할 수 있도록 좋은 오래된 C 배열 주위에 간단한 Objective C 래퍼를 만들었습니다. https://gist.github.com/4705733
정수 순서가 필요하지 않고 고유 한 값만있는 경우
NSIndexSet 또는 NSMutableIndexSet을 사용할 수도 있습니다. 정수를 쉽게 추가 및 제거하거나 배열에 정수가 포함되어 있는지 확인할 수 있습니다.
- (void)addIndex:(NSUInteger)index
- (void)removeIndex:(NSUInteger)index
- (BOOL)containsIndexes:(NSIndexSet *)indexSet
자세한 내용 은 설명서 를 확인하십시오 .
NSSet(및으로 래핑 된 정수 사용 NSNumber)에 문제가 있습니까?
NSNumbers를 사용하는 것이 훨씬 쉽다고 생각합니다. 이 모든 작업을 수행해야합니다.
NSNumber *myNum1 = [NSNumber numberWithInt:myNsIntValue1];
NSNumber *myNum2 = [NSNumber numberWithInt:myNsIntValue2];
.
.
.
NSArray *myArray = [NSArray arrayWithObjects: myNum1, myNum2, ..., nil];
for또는 다음 또 다른 숫자에 대한 배열하고 arrayWithArray.