使用枚举作为PerformSelector:WithObject中的对象:

时间:2014-09-11 18:27:54

标签: ios objective-c enums selector typedef

我不了解代码中的某些行为。我在.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;
    }
}

1 个答案:

答案 0 :(得分:4)

它起作用,因为第一个对象的值是0,这与传递nil相同。传递nil是可以的,但不能传递另一个原语。改为使用对象:@(连接)传递NSNumber,然后打开state.integerValue