我喜欢新的Objective-C下标:
id anotherObject;
someObject[2] = anotherObject;
但是有可能实现它的非对象类型吗?例如:void *
?
void *myPointer;
someObject[2] = myPointer;
我所说的可能是指可能,没有任何优雅的概念。
要让您的对象实现索引下标,您需要实现以下两个方法(用于数字索引):
- (id)objectAtIndexedSubscript:(NSUInteger)idx;
- (void)setObject:(id)obj atIndexedSubscript:(NSUInteger)idx;
现在你可以传递nsvalue来包装你的void*
,并使用常规的nsarray,像这样:
myArray[i] == [NSValue valueWithPointer:myVoidPtr];
myVoidPtr = [myArray[i] pointerValue];
或者用你自己版本的这些方法实现你自己的集合,但是这需要你像这样在你的集合内和集合外桥接cast:
myArray[i] == (__bridge id)myVoidPtr;
myVoidPtr = (__bridge void*)myArray[i];
都没有提供令人满意的解决方案。NSValue的换行方法可以用几个宏来做换行和解换行,但是你失去了直接索引。