Objective-C数组风格的C指针下标



我喜欢新的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的换行方法可以用几个宏来做换行和解换行,但是你失去了直接索引。

最新更新