0

是否可以在 Objective-C 中更改类的定义?

例如,我有一个创建对象(项目符号)的函数,这些项目符号都是一样的。但是,如果给定一个事件,比如加电,我想改变那些子弹。无论是大小,颜色,还是你有什么。

在我的代码中,我有

 playerBullet = [[PlayerBullet alloc] init]; 

但这总是将新项目符号初始化为标准模板项目符号,而不管“上电”如何。

有没有办法调整类定义,使 PlayerBullet 类的所有新分配都带有新值?

PlayerBullet.setProjectileColor:@"red";  

还是这种方法不好?

4

3 回答 3

1

在需要的地方打电话[[PlayerBullet alloc] initWithColor:@"red"]

-(id) initWithColor:(NSString*) color{
    self = [self init];
    [self setProjecticeColor:colour];
    return self;
}
于 2013-11-13T17:46:32.033 回答
1

您的问题的答案是No。但是,通过适当的设计,您尝试做的事情很容易实现。

您应该在您的PlayerBullet类中创建一个带有参数的客户初始化方法。

- (id) initWithProjectileColor:(NSString*)color 
{
    self = [self init];
    if (self)
    {
        self.projectileColor = color;
    }
    return self;
}

所以你可以创建一个方法,然后调用类似的东西:

[[PlayerBullet alloc] initWithProjectileColor:@"red"];

或者,您可以创建公共属性并在创建“空白”射弹后设置它们。

于 2013-11-13T17:49:36.270 回答
0

没有办法自动执行此操作。你可以用这样的东西自己做。(不包括内存管理。)

static NSString *DefaultProjectileColor = @"black";

+(void) setDefaultProjectileColor:(NSString *)color {
    DefaultProjectileColor = color;
}

+(NSString *) defaultProjectileColor {
    return DefaultProjectileColor;
}

-(id) init {
    ...
    self.projectileColor = [PlayerBullet defaultProjectileColor];
    ...
}

-(void) gotPowerUp {
    ...
    [PlayerBullet setDefaultProjectileColor:@"red"];
    ...
}
于 2013-11-13T20:58:08.813 回答