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