我不了解代码中的某些行为。我在.m文件的顶部定义了一个枚举:
typedef NS_ENUM (NSInteger, connectionState) {
tryingToConnect,
connecting,
disconnecting
};
在我的代码中,我调用方法:
[self performSelector:@selector(animateForState:) withObject:tryingToConnect afterDelay:1.5];
这完全没问题。
然而,如果我用"连接"或者"断开":
[self performSelector:@selector(animateForState:) withObject:connecting afterDelay:1.5];
Xcode警告我"' NSInteger'隐式转换。 (又名' int')to' id'不允许使用ARC"。为什么顶级枚举变量(tryingToConnect)工作而不是我的类型定义中的以下(连接/断开连接)?
为了包含所有内容,这就是所谓的方法:
- (void)animateForState:(connectionState)state{
switch (state) {
case tryingToConnect:{
NSLog(@"trying to connect");
break;
}
case connecting:{
NSLog(@"connecting");
break;
}
case disconnecting:{
NSLog(@"disconnecting");
break;
}
default:
break;
}
}
答案 0 :(得分:4)
它起作用,因为第一个对象的值是0,这与传递nil相同。传递nil是可以的,但不能传递另一个原语。改为使用对象:@(连接)传递NSNumber,然后打开state.integerValue