ios - 如何在 iOS 中使用 NSString 避免过多的 if-else 语句?

标签 ios objective-c if-statement nsstring

大家好,我想使用 iOS8 的新 APNs api 来处理通知操作。在这个方法中:

- (void)application:(UIApplication *)application
handleActionWithIdentifier:(NSString *)identifier
     forRemoteNotification:(NSDictionary *)notification
         completionHandler:(void (^)())completionHandler {

      if ([identifier isEqualToString:@"ACCEPT_IDENTIFIER"]) {
          [self handleAcceptActionWithNotification:notification];
      }
      else if([identifier isEqualToString:@"MAYBE_IDENTIFIER"]) {
          [self handleMaybeActionWithNotification:notification];
      }
      else if ([identifier isEqualToString:@"REJECT_IDENTIFIER"]) {
          [self handleRejectActionWithNotification:notification];
      }
      else if....blah blah blah..
}

在这种情况下,我以后可能不得不用NSString写太多的if-else语句,我知道一些避免太多if-else语句的方法,比如使用switch,但它不适用于string或NSString案例。

是否有任何解决方案可以避免在此字符串或 NSString 情况下编写过多的 if-else 语句? 提前致谢。

最佳答案

你可以把所有的选择器放在一个字典映射中

NSDictionary* handleMap = @{ 
    @"ACCEPT_IDENTIFIER" : NSStringFromSelector(@selector(handleAcceptActionWithNotification:))
    @"MAYBE_IDENTIFIER" : NSStringFromSelector(@selector(handleMaybeActionWithNotification:))
    @"REJECT_IDENTIFIER" : NSStringFromSelector(@selector(handleRejectActionWithNotification:)])
};

NSString* selString = handleMap[identifier];
if (selString) {
    SEL sel = NSSelectorFromString(selString);
    [self performSelector:sel withObject:notification];
}

handleMap 应该声明为成员变量,这样它只会被初始化一次。

关于ios - 如何在 iOS 中使用 NSString 避免过多的 if-else 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25656429/

相关文章:

r - 有很多类别的 ifelse 语句

iphone - iPhone中的MDM集成文档

ios - 保存图片路径到sqlite3数据库

php - 如果日期等于用户的生日,如何向用户回显?

objective-c - 使用为 ARC 配置的 XMLRPC 库,收到 ARC 错误

iphone - UITabbarController 允许在更多选项卡中进行编辑

MySQL热门搜索查询,如果搜索已经存在,如何添加到计数而不是插入新?

ios - 在iOS上嵌入用户的最新YouTube视频

ios - UICollectionView 上的 UIRefreshControl 高度非常低

ios - 尝试重新访问之前在 SwiftUI 中单击的 NavigationLink 时,NavigationLink 卡住