Ios 方法是否可能(或建议)识别其调用者?

Ios 方法是否可能(或建议)识别其调用者?,ios,objective-c,function,enums,Ios,Objective C,Function,Enums,我正在开发一个简单的游戏,玩家需要掷骰子,然后“计算机”需要这样做 我想要一个roll方法,它对每种类型的玩家的表现略有不同 //Protagonist.h (your superclass) @interface Protagonist : NSObject - (void)roll; @end //Player.h #import "Protagonist.h" @interface Player : Protagonist @end //Player.m @implementa

我正在开发一个简单的游戏,玩家需要掷骰子,然后“计算机”需要这样做

我想要一个
roll
方法,它对每种类型的玩家的表现略有不同

//Protagonist.h (your superclass)
@interface Protagonist : NSObject

- (void)roll;

@end

//Player.h
#import "Protagonist.h"

@interface Player : Protagonist

@end

//Player.m
@implementation Player

- (void)roll {
    NSLog(@"I'm a real player");
    }

@end

//Computer.h
#import "Protagonist.h"

@interface Computer : Protagonist

@end

//Computer.m
@implementation Computer

- (void)roll {
    NSLog(@"I'm a computer");
}

@end

//ExternalController.m
Protagonist *computer = [Computer new];
[computer roll]; //"I'm a computer"

Protagonist *computer = [Player new];
[computer roll]; //"I'm a real player"
它当前使用名为
isPlayer
(vs.isComputer)的
BOOL
参数进行设置。玩家传递真值,计算机传递假值。方法中有一些相应的
if
语句

这对我来说似乎很笨重。有更好的办法吗

我正在考虑创建一个
PlayerType
enum,每个玩家都有一个类型,但他们仍然需要将类型传递给该方法。或者他们可以将游戏变量更改为该类型,并且方法可以识别该类型


任何想法都会有帮助。谢谢。

不,这看起来不错,而且是一种常用且简单的图案

一个
BOOL
一直都很好,只有两种类型的玩家(或行为),如果玩家数量超过2,则移动到
enum


或者,存在多态性,
roll
方法的行为因实现它的子类而异。这将不需要传递参数,因为行为被锁定在类中。

传递枚举可能是一个不错的选择

另一个是创建一个名为“protation”的超类(例如),实现一个
roll()
方法和从“protation”继承的另外两个类“Human”和“Player”。通过这种方式,您可以指定每种玩家的行为

//Protagonist.h (your superclass)
@interface Protagonist : NSObject

- (void)roll;

@end

//Player.h
#import "Protagonist.h"

@interface Player : Protagonist

@end

//Player.m
@implementation Player

- (void)roll {
    NSLog(@"I'm a real player");
    }

@end

//Computer.h
#import "Protagonist.h"

@interface Computer : Protagonist

@end

//Computer.m
@implementation Computer

- (void)roll {
    NSLog(@"I'm a computer");
}

@end

//ExternalController.m
Protagonist *computer = [Computer new];
[computer roll]; //"I'm a computer"

Protagonist *computer = [Player new];
[computer roll]; //"I'm a real player"

你能简单地描述一下roll方法是如何识别哪个子类调用它的吗?@我的意思可能不是说每个子类将以不同的方式实现
roll
方法。当不使用多态方法时,有必要向该方法传递方向,就像您当前所做的那样。是的,这很有意义!谢谢问题标记为Objective-C。最好用相关语言提供答案。