Ios 在PerformSelect:WithObject中将枚举用作对象:
我不理解代码中的某些行为。我在.m文件的顶部定义了一个枚举:Ios 在PerformSelect:WithObject中将枚举用作对象:,ios,objective-c,enums,selector,typedef,Ios,Objective C,Enums,Selector,Typedef,我不理解代码中的某些行为。我在.m文件的顶部定义了一个枚举: typedef NS_ENUM (NSInteger, connectionState) { tryingToConnect, connecting, disconnecting }; 在我的代码后面,我调用该方法: [self performSelector:@selector(animateForState:) withObject:tryingToConnect afterDelay:1.5]; 这个很好用 但如果我用“连接
typedef NS_ENUM (NSInteger, connectionState) {
tryingToConnect,
connecting,
disconnecting
};
在我的代码后面,我调用该方法:
[self performSelector:@selector(animateForState:) withObject:tryingToConnect afterDelay:1.5];
这个很好用
但如果我用“连接”或“断开连接”来称呼它:
Xcode警告我“ARC不允许将'NSInteger'(也称为'int')隐式转换为'id'。为什么在我的类型定义中,顶部的枚举变量(tryingToConnect)有效,而下面的变量(connecting/disconnecting)无效
为了包含所有内容,该方法的调用如下所示:
- (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,这与传递nil相同。可以传递nil,但不能传递另一个基元。而是用object:@(connecting)传递NSNumber,然后打开状态。integerValue它工作,因为第一个对象的值是0,这与传递nil相同。可以传递nil,但不能传递另一个基元。用object:@(connecting)传递NSNumber,然后打开状态。integerValueAaah我有一个诀窍,第一个值是0,但没有意识到它等同于传递nil。。。非常感谢@rdelmar现在一切正常!啊,我有一个诀窍,第一个值是0,但我没有意识到这相当于通过零。。。非常感谢@rdelmar现在一切正常!
- (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;
}
}