NSString 与 Class/Protocol/SEL 相互转化

简述

在开发中, 我们有时候视图用字符串来替代Calss 或者protoclo 或者SEL 的情况, 因为这样会更加灵活和方便。今天就来看一看,这是它们之间是怎么样相互转化的。

//NSString 与 Class 相互转化
Class NSClassFromString (NSString *aClassName);  
NSString * NSStringFromClass (Class aClass);  
 
//NSString 与 Protocol 相互转化 
NSString * NSStringFromProtocol (Protocol *proto);  
Protocol *NSProtocolFromString (NSString *namestr);  
  
//NSString 与 SEL 相互转化
NSString *NSStringFromSelector (SEL aSelector);  
SEL NSSelectorFromString (NSString *aSelectorName);  

例子

我曾经遇到过,在一个页面中可以有9个选择去push 出不同的页面。这样的情况下,如果每个控制器的 push 我都要按照如下代码来写,这岂不是要累死自己, 所以我找了找一个简单的方法。

RegisterViewController *registerVC = [[RegisterViewController alloc] init];
[self.navigationController pushViewController:registerVC animated:YES];
//

就是利用了NSString 与 Class 的转化:

//将所有控制器类的字符串放入数组 array中
NSArray *arry = [NSArray arrayWithObjects:@"WantToLoanViewController",@"WantToSaleBusinessViewController",@"GetBusinessEverydayViewController",@"LoanGroupViewController",@"PledgeGroupViewController",@"CooperationViewController",@"ReconmmendForMeViewController",@"ActivityAnnouncementsViewController",@"ContactUsViewController", nil];
//取对应类名
NSString *className = [array objectAtIndex:indexPath.row];
Class Representative = NSClassFromString(className);
//创建 Controller 并 push
UIViewController *VC = [[Representative alloc] init];
[self.navigationController pushViewController:VC animated:YES];  

总结:

当然,我这里只是举个例子, 不同情境下需要用到的方法也不一定相同, 所以还NSString 与 Protocol/SEL 的相互转化,这里就不一一举例了。

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

DCSnail-蜗牛

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值