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。最好用相关语言提供答案。