如上图所示,步骤很简单:
从注册的配置中找到匹配的YTRouterActionObject对象
执行YTRouterActionObject对象的actionBlock,会传递一个YTRouterActionCallbackObject对象,如果调用者需要的是返回值,可以使用YTRouterActionCallbackObject对象的actionCallbackBlock传递一个返回值,这个actionBlock是又业务方的注册者实现的
以上步骤对应的代码如下:
- (BOOL)runWithActionCallbackObject:(YTRouterActionCallbackObject *)actionCallbackObject {
// 判断是否支持scheme
if (![self canAcceptScheme:actionCallbackObject.uri.scheme]) {
return NO;
}
// 获取path对应的ActionObject
YTRouterActionObject *actionObject = [self actionObjectWithPath:actionCallbackObject.uri.path];
// 执行Path注册的对应Block
!actionObject.actionBlock ?: actionObject.actionBlock(actionCallbackObject);
return YES;
}
- (YTRouterActionObject *)actionObjectWithPath:(NSString *)path {
NSMutableDictionary *subRouter = [self subRouterMapWithPath:path];
return subRouter[YTRouterActionObjectKey];
}
客户端的使用
以上讲到了核心的路由注册实现和路由使用实现,总共代码还没有50行,所以还是很简单的,接下来会讲下客户端的使用步骤,包括
- 客户端注册者注册
-
客户端调用者使用
客户端注册者注册
注册的时机需要比较找,考虑到集成的方便,选择在load方法中处理路由注册,如下代码所示,添加了几个测试的路由,分两种情况来说明下使用










