我正在使用xcode使用命令行构建一个垄断棋盘游戏。我能够在船上创建板和瓷砖,但是我有一个问题,试图返回玩家在板上的位置。以下是我的代码:
-(NSString *) description
{
NSString *_playerresult;
_playerresult = _name;
return _playerresult.description;
}
-(NSString *) currentLocation
{
return _isOn.description;
}
如您所见,description是一个存储结果的字符串变量。主要是,我把p1.currentlocation放到了程序可以返回玩家的位置,但事实并非如此。它提示Tile:0x10010ac90
更新 这是整个班级计划,
#import "Player.h"
@implementation Player
-(id)initWithName:(NSString *) name
{
if (self = [super init])
{
name = _name;
}
return self;
}
-(void) move:(Dice *) die
{
[die rollDice];
[_isOn leave:self];
[_isOn move:self using:die remainingSteps:die.totalValue];
}
-(void) placeOn:(Tile *) t
{
self->_isOn = t;
[t land:self];
}
-(NSString *) description
{
NSString *_playerresult;
_playerresult = _name;
return _playerresult.description;
}
-(NSString *) currentLocation
{
return _isOn.description;
}
@end
答案 0 :(得分:0)
description
方法在NSObject
协议中声明,并由符合该协议的任何类实现。
描述如下:
此方法用于创建对象的文本表示, 例如,在格式化的字符串
中
但它的默认实现是返回相关对象的类名和内存地址,因此你在控制台中看到Tile: 0x10010ac90
的原因。
您需要覆盖description
类中的Tile
并返回根据需要格式化的字符串,例如:
-(NSString *)description
{
return [NSString stringWithFormat:@"Tile Location: %d x %d", row, column];
}
旁注
您可以通过删除不必要的变量来简化description
类中Player
的实现:
-(NSString *) description
{
NSString *_playerresult;
_playerresult = _name;
return _playerresult.description;
}
变为:
-(NSString *) description
{
return _name.description;
}
其他信息
在人们开始投票/评论之前说description
只是用于调试目的,我建议他们重新阅读description
方法的讨论,并注意description
3}}方法仅用于打印调试信息。文档中没有任何内容表示{{1}}无法被任意覆盖。