gpt4 book ai didi

objective-c - 在自定义类上实现 NSFastEnumeration

转载 作者:太空狗 更新时间:2023-10-30 03:39:29 26 4
gpt4 key购买 nike

我有一个继承自 NSObject 的类。它使用 NSMutableArray 来保存子对象,例如人们使用 NSMutableArray *items 来保存 Person 对象。如何在项目上实现 NSFastEnumerator?

我试过以下但无效:

@interface People : NSObject <NSFastEnumeration>
{
NSMutableArray *items;
}

@实现...

- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(id *)stackbuf count:(NSUInteger)len
{
if(state->state == 0)
{
state->mutationsPtr = (unsigned long *)self;
state->itemsPtr = items;
state->state = [items count];
return count;
}
else
return 0;
}

最佳答案

您没有正确使用 NSFastEnumerationState 结构。参见 NSFastEnumeration Protocol Reference并查看常量部分以查看每个字段的描述。在您的情况下,您应该将 state->mutationsPtr 保留为 nil。 state->itemsPtr 应该设置为对象的 C 数组,而不是 NSArray 或 NSMutableArray。您还需要将相同的对象放入作为 stackbuf 传递的数组中。

但是,由于您正在使用 NSMutableArray 来包含您正在枚举的对象,因此您可以将调用转发给该对象:

- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(id *)stackbuf count:(NSUInteger)len {
return [items countByEnumeratingWithState:state objects:stackbuf count:len];
}

关于objective-c - 在自定义类上实现 NSFastEnumeration,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4827826/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com