【问题标题】:how to pass enum as parameter to function in objectivec如何将枚举作为参数传递给目标c中的函数
【发布时间】:2014-02-10 08:30:38
【问题描述】:

头文件如下:

enum RatingsEnum
{
    userRating,
    criticRating,
};

@interface SFMovie : NSObject

- (NSNumber *)getRating:(NSDictionary *)movieDic :(enum RatingsEnum) rating;

@end

我怎样才能使用这个方法getRating?我不确定如何通过枚举。我的调用代码:

- (void) testGetCriticRatingMethod{

    NSMutableDictionary *ratingDictionary = [[NSMutableDictionary alloc]init];
    [ratingDictionary setObject:@"Certified Fresh" forKey:@"critics_rating"];
    [ratingDictionary setObject:@"70" forKey:@"critics_score"];
    [ratingDictionary setObject:@"Certified Fresh" forKey:@"audience_rating"];
    [ratingDictionary setObject:@"87" forKey:@"audience_score"];
    SFMovie *movie = [[SFMovie alloc]init];
    enum RatingsEnum ratings;
    NSInteger userRating = [movie getRating:ratingDictionary rating:userRating];
}

这会产生以下警告: “SFMovie”没有可见的@interface 声明选择器“getRating:rating:”

有人可以指导我学习一个好的枚举教程吗?谢谢大家。

【问题讨论】:

  • 这真的与枚举没有任何关系。这只是一般的命名方法。
  • 好的,谢谢。在这里问问题之前我没有花足够的时间进行调试:(。我在将问题放在 stackoverflow 上后立即看到了错误:(

标签: objective-c enums


【解决方案1】:

改变

 - (NSNumber *)getRating:(NSDictionary *)movieDic :(enum RatingsEnum) rating;

 - (NSNumber *)getRatingWithDictionary:(NSDictionary *)movieDic ratingEnum:(enum RatingsEnum) ratingEnum;

改变

 enum RatingsEnum ratings;
 NSInteger userRating = [movie getRating:ratingDictionary rating:userRating];

 enum RatingsEnum ratings = userRating;
 NSNumber *ratingFromUser = [movie getRatingWithDictionary:ratingDictionary ratingEnum:ratings];

【讨论】:

    【解决方案2】:

    这与enum 或参数的类型完全无关。您的语法完全错误。声明的方法名称是getRating::。正确的调用看起来像

    [movie getRating:ratingDictionary :userRating];
    

    给第二个参数加标签

    - (NSNumber *)getRating:(NSDictionary *)movieDic ofType:(enum RatingsEnum)rating;
    

    【讨论】:

    • 知道了。谢谢乔希。
    猜你喜欢
    • 2011-12-04
    • 1970-01-01
    • 1970-01-01
    • 2011-07-18
    • 1970-01-01
    • 2012-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多