ios - 在 Objective C 中不使用 switch 语句显示评级图像的最佳实践

标签 ios objective-c nsstring

我有一个表格 View ,其中包含许多地方,其评级是使用解析中的云代码计算的。我目前使用 switch 语句根据获得的评分显示图像。这是我当前的代码。

[PFCloud callFunctionInBackground:@"calculateRating"
                   withParameters:@{@"place":cell.placeName.text}
                            block:^(NSNumber *ratings, NSError *error) {
                                if (!error) {
                                    NSLog(@"%@ has %d starts",cell.placeName.text,[ratings intValue]);
                                    rating = [ratings intValue];
                                    switch(rating) {
                                        case 1:
                                            cell.ratingImage.image=[UIImage imageNamed:@"1Stars.png"];
                                            break;
                                        case 2:
                                            cell.ratingImage.image=[UIImage imageNamed:@"2Stars.png"];
                                            break;
                                        case 3:
                                            cell.ratingImage.image=[UIImage imageNamed:@"3Stars.png"];
                                            break;
                                        case 4:
                                            cell.ratingImage.image=[UIImage imageNamed:@"4Stars.png"];
                                            break;
                                        case 5:
                                            cell.ratingImage.image=[UIImage imageNamed:@"5Stars.png"];
                                            break;

                                        default:
                                            break;
                                    }

                                }

                        }];

我尝试了以下代码来解决问题,但它不起作用。
NSString *ratingImageName=[NSString stringWithFormat:@"%dStars.png",(int) ratings];
                                    cell.ratingImage.image=[UIImage imageNamed:ratingImageName];

我收到以下错误。
-[NSNull intValue]:无法识别的选择器发送到实例 0x108572ce0

谁能帮助我根据检索到的评级显示我拥有的 5 个评级图像的最佳方式?

最佳答案

每当您看到 switch像这样,想想“数组”。

制作 NSArray , 以 kStars.png 的方式预填充图像位于索引 k ,并将其放入实例变量中:

_ratingImages = @[
    [UIImage imageNamed:@"0Stars.png"]
,   [UIImage imageNamed:@"1Stars.png"]
,   [UIImage imageNamed:@"2Stars.png"]
,   [UIImage imageNamed:@"3Stars.png"]
,   [UIImage imageNamed:@"4Stars.png"]
,   [UIImage imageNamed:@"5Stars.png"]
];

现在您可以用单个分配替换开关:
cell.ratingImage.image=_ratingImages[rating];

这种方法的一个重要优点是图像只创建一次,并缓存在类实例上。这使您免于不必要的查找和对象构造。

注:如果你宁愿让你的代码工作,它不工作的原因是你正在使用强制转换而不是调用 intValue :
NSString *ratingImageName=[NSString stringWithFormat:@"%dStars.png",[ratings intValue]];

关于ios - 在 Objective C 中不使用 switch 语句显示评级图像的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28710935/

相关文章:

iphone - 在 iPhone 编程中追加到 NSString 中间

ios - 如何根据picker日期查询sql语句

ios - 如何在不使用自动布局的情况下设置 UISegmentedControl 子类的高度?

ios - 如何在游戏中设置对话逻辑?

ios - 如何在 UIWebView 中获取检测到的数字

objective-c - iOS 如何处理数据库更新所需的时间

ios - 将 UILabel 内容格式化为美国电话号码格式

ios - 执行 push segue 后没有出现“后退”按钮

ios - 使用协议(protocol)作为程序集接口(interface)时 Typhoon 初始化失败

ios - 当我的 Rails 服务器返回 304 时,Alamofire 响应对象返回 200 状态代码