iOS模块之间相互通讯之 -- 协议制定

所有需要合作的东西都需要一个统一的合理的协议,比如说http,代码规范,resful规范,都是一套大家公认的比较容易接受的协议,客户端之间通讯,app内部通讯也需要一套协议,以利于大家能够最快的理解,增加代码的一致性和规范性,检查bug的可能性。

一:协议定义

iOS系统中,app与app交互协议通常是 aaa://xxxxxx

比如说你的app打开微信app,需要使用

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"wechat://"]];

模仿一个协议,我们也可以新增两个参数

meituan://user?userName=张三&phoneNumber=178xxxxxxxx

meituan://  : 协议头,如果你的app希望被第三方app打开,需要制定自己的协议头,在info ->URL Types 中新增一个meituan,一个app可以自定义多个schemes

user :页面名称

?:类似于http中接名称后面要跟参数了

& :参数连接符

参数1:userName:姓名

参数2: phoneNumber:电话号码

 

二:从协议中获取参数

建立一个URLParser的类



@interface URLParser ()

@property (strong, nonatomic) NSArray *variables;

@end



- (instancetype)initWithURLString:(NSString *)string {
    
    self = [super init];
    
    if (self) {
    
        NSString *urlString = string;
        NSScanner *scanner = [NSScanner scannerWithString:urlString];
        [scanner setCharactersToBeSkipped:[NSCharacterSet characterSetWithCharactersInString:@"&?"]];
        
        NSString *tempString;
        NSMutableArray *vars = [[NSMutableArray alloc] init];
        // Ignore the beginning of the string and skip to the variables.
        [scanner scanUpToString:@"?" intoString:nil];
        while ([scanner scanUpToString:@"&" intoString:&tempString]) {
            [vars addObject:tempString];
        }
        _variables = vars;
    }
    
    return self;
}

- (NSString *)valueForVariable:(NSString *)varName {
    for (NSString *var in _variables) {
        if ([var length] > [varName length] + 1 && [[var substringWithRange:NSMakeRange(0, [varName length] + 1)] isEqualToString:[varName stringByAppendingString:@"="]]) {
            NSString *varValue = [var substringFromIndex:[varName length] + 1];
            return varValue;
        }
    }
    
    return nil;
}

 

使用方法:

URLParser *urlParser = [[URLParser alloc] initWithURLString:url];

NSString *userName = [urlParser valueForVariable:@"userName"];

NSString *phoneNumber = [urlParser valueForVariable:@"phoneNumber"];

使用上面的方法传入一个url,就可以解析出userName,phoneNumber。

接着就可以根据写逻辑代码了

 

 

 

转载于:https://my.oschina.net/zhuzhu1223/blog/1596180

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值