在Objective-C中创建和设置typedef结构值

在Objective-C中创建和设置typedef结构值,objective-c,variables,struct,set,typedef,Objective C,Variables,Struct,Set,Typedef,我在一个经常使用的游戏中有一个类,我想通过使用typedef结构将实例变量组合在一起来整理它会很好。我还不完全相信这是否会有帮助 最初在我的类标题界面中,我有如下内容: 在我的.m @synthesize invulnerableToggled = _invulnerableToggled, invulnerableCount = _invulnerableCount, invulnerableMax = _invulnerableMax; @synthesize invulnerable

我在一个经常使用的游戏中有一个类,我想通过使用typedef结构将实例变量组合在一起来整理它会很好。我还不完全相信这是否会有帮助

最初在我的类标题界面中,我有如下内容:

在我的.m

@synthesize

invulnerableToggled = _invulnerableToggled,
invulnerableCount = _invulnerableCount,
invulnerableMax = _invulnerableMax;
@synthesize

invulnerable = _invulnerable;
该类的子类将这些变量设置为init中的默认值。另一个类可以访问该子类的实例,并使用常规的点表示法相应地设置值,如tetthing.invulnerableToggled=YES

现在我使用的是typedef结构,看起来我的值无法调整,我尝试了各种方法来克服它。虽然这可能是因为我没有正确地设置开始,所以以防万一,我会告诉你我现在正在做什么

当前我的类标题:

在我的.m

@synthesize

invulnerableToggled = _invulnerableToggled,
invulnerableCount = _invulnerableCount,
invulnerableMax = _invulnerableMax;
@synthesize

invulnerable = _invulnerable;
我在子类init中设置这些值,如下所示:

_invulnerable.toggled = NO;
_invulnerable.count = 0;
_invulnerable.max = 50;
当我试图在另一个类中设置它时,我希望它将当前值加1。它始终保持为1。此if语句有时每秒检查60次,但未更改计数:

Invulnerable invulnerable = tempBaddy.invulnerable;

// check baddy invulnerability and increment if needed

if(invulnerable.toggled == YES){

    int increase = invulnerable.count +1;

    invulnerable.count = increase;

    NSLog(@"invulnerable.count = %i", invulnerable.count);
}

这在ObjC中不是常见的方法,但可以通过引用传递结构,即返回指向结构的指针:

@interface ThingClass : CCLayer {
@protected
    Invulnerable _invulnerable;
}

@property(nonatomic, readonly) Invulnerable* invulnerable;

@end
*.m文件:

@implementation ThingClass

- (Invulnerable*)invulnerable {
    return &_invulnerable;
}

@end
更新数据:

Invulnerable* invulnerable = tempBaddy.invulnerable;
// check baddy invulnerability and increment if needed
if(invulnerable->toggled == YES){
    invulnerable->count++;
    NSLog(@"invulnerable.count == %i", tempBaddy.invulnerable->count);
}
我猜您正在尝试对ThingClass或其子类的实例执行某些操作。而且这个动作会影响到_invulnerable的价值。在这种情况下,更常见的方法是在Thing类中使用一个方法来执行所有必需的更新:

@implementation ThingClass

- (void)headshot {
    if (_invulnerable.toggled) {
        _invulnerable.count++;

    } else {
        [self die];
    }
}

@end

欢迎使用C中的传递值!您可以创建该结构的本地变量。然后将复制值指定为tempbady.invulvable的值。然后增加本地副本成员的值。但就我们所见,你永远不会将增加的价值复制回tempbady.inv无懈可击。下次重新开始时,将不变的tempbady.invulvable值复制到一个新创建的局部变量etc.pp中。为什么不创建一个包含4个属性的invulvable类?最后一个类也不过是一个结构,但你可以用你习惯的方式来处理它。赫尔曼,看来我最后所做的就是tempbady.invulible=invulible;但这难道不是更容易吗?如果不太复杂的话,这门课听起来是个好主意。