我理解类型转换有问题,从我的角度来看,这真的很糟糕:
月是NSArray 所以我没有物品: months.count == 0
这不会像它应该出现的那样工作0< 0 -1是真的吗?
(0 < months.count -1) == true
但这很好用
(0 < (int)months.count -1) == false
不明白为什么?
答案 0 :(得分:5)
count返回NSUInteger,它是无符号的,因此months.count -1
是无符号表达式,并且被计算为正数,因此大于0。
当你将它转换为int时,表达式(int)months.count -1
被评估为signed,因此等于-1,小于0。
答案 1 :(得分:1)
从NSArray documentation,我们可以看到count
方法返回一个NSUInteger,它是一个无符号整数。通过从无符号0中减去1,我们得到了你实际可以获得的最大可能的无符号整数。