调试日志如下所示。
2013-06-09 17:09:09.192 BridgeDeal[2430:11303] suito: 2K
2013-06-09 17:09:09.193 BridgeDeal[2430:11303] suit: 50
2013-06-09 17:09:09.193 BridgeDeal[2430:11303] suito: 2Q
2013-06-09 17:09:09.193 BridgeDeal[2430:11303] suit: 50
2013-06-09 17:09:09.194 BridgeDeal[2430:11303] suito: 3J
2013-06-09 17:09:09.194 BridgeDeal[2430:11303] suit: 51
上面suito
的值是正确的,但不是上面suit
的值。取而代之的是suit
的值,我希望得到2,2,3。
for (int i = 0; i<3; i++) {
NSInteger suit = [[self.cardList objectAtIndex:i ] characterAtIndex:0] ;
NSLog(@"suito: %@", [self.cardList objectAtIndex:i ]);
NSLog(@"suit: %d", suit);
}
cardlist
声明如下。
@property (nonatomic, weak) NSMutableArray *cardList;
我尝试了以下代码,但收到错误:bUnexpected type name 'NSRange'
NSInteger suit = [[self.cardList objectAtIndex:i ] substringWithRange:NSRange(0,1)] ;
答案 0 :(得分:2)
您获得的是该号码的ASCII码。这就是角色。
您的第二部分代码更好,但请使用NSMakeRange
或(NSRange){0,1}
答案 1 :(得分:1)
将NSLog(@"suit: %d",suit);
更改为NSLog(@"suit: %d",suit - '0');
。
当你在NSString对象上调用characterAtIndex时,它返回一个unichar(unsigned short)变量;然后将该值存储在NSInteger中。你认为这会给你一个错误。它不是因为unichar(和C,char)变量实际上是整数(在这种情况下,unichar只是typedef为unsigned short)。每个字符('a','b','c','d'等)都有与之关联的不同数字。碰巧与ASCII字符集中的字符“2”相关联的数字是50,与“3”相关联的数字是51.因为(无论如何是ASCII)数字“0”到“9”的字符都是顺序的,你可以通过从你的角色(suit - '0'
)的值中减去'0'的值来“破解”你获得实际数字的方式。由于'0'(以ASCII为单位)的值为48,因此减去它会得到2,2和3,而不是50,50和51。
如果您将卡套装表示为数字,您可以考虑将它们作为数字而不是字符串存储在数组中。