我喜欢新的 Objective-C 下标:
id anotherObject;
someObject[2] = anotherObject;
但是可以为非对象类型实现它吗?例如无效*
?
void *myPointer;
someObject[2] = myPointer;
所谓的“可能”,我真正的意思是“可能”,没有任何优雅的概念。
最佳答案
要让您的对象实现索引下标,您需要实现以下两个方法(用于数字索引):
- (id)objectAtIndexedSubscript:(NSUInteger)idx;
- (void)setObject:(id)obj atIndexedSubscript:(NSUInteger)idx;
现在您可以传递包装 void*
的 NSValues 并使用常规 NSArray,如下所示:
myArray[i] == [NSValue valueWithPointer:myVoidPtr];
myVoidPtr = [myArray[i] pointerValue];
或者使用这些方法的您自己的版本来实现您自己的集合,但这将需要您像这样桥接传入和传出集合:
myArray[i] == (__bridge id)myVoidPtr;
myVoidPtr = (__bridge void*)myArray[i];
两者都没有提供非常令人满意的解决方案。 NSValue 包装方法可以通过几个宏来更好地进行包装和展开,但您会失去直接索引。
关于Objective-C 数组风格的 C 指针下标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16318323/