接上文疾瓮,創(chuàng)建組件與主工程完成綁定引用后,下面就需要在組件中開發(fā)需求功能吊履。
組件的創(chuàng)建與綁定參考:iOS組件化開發(fā)(.a 靜態(tài)庫方式)
為了模擬實(shí)現(xiàn)安皱,我們假定這樣一個(gè)需求:
要求開發(fā)將用戶信息相關(guān)的功能封裝在獨(dú)立組件中供其他開發(fā)使用(可能是外圍開發(fā)),要求有:登錄功能界面艇炎、退出功能酌伊、獲取用戶基礎(chǔ)信息接口。
為此我們?cè)诮M件的ToolsComponent.h中提供這些接口:
展示登錄功能界面入口缀踪、退出功能接口居砖、獲取用戶基礎(chǔ)信息接口。
如下代碼片段:
ToolsComponent.h
//登陸頁面
+ (void)openLoginViewControllerCompleted:(void(^)(BOOLisSuccess))completed;
//獲取用戶基礎(chǔ)信息
+ (void)getUserInfoCompleted:(void(^)(UserModel?* model))completed;
//退出功能
+ (void)userLogoutCompleted:(void(^)(BOOL?isSuccess))completed;
ToolsComponent.m中分別實(shí)現(xiàn)對(duì)應(yīng)的功能
+ (void)openLoginViewControllerCompleted:(void(^)(BOOLisSuccess))completed{
LoginViewController?* loginVc = [[LoginViewController?alloc]?init];
loginVc.loginFinished?= completed;
UINavigationController?* nav = [[UINavigationController?alloc]?initWithRootViewController:loginVc];
[nav.navigationBar?setTranslucent:NO];
[nav?setModalPresentationStyle:UIModalPresentationFullScreen];
[[self?topMostViewController]?presentViewController:nav?animated:YEScompletion:NULL];
}
+ (void)getUserInfoCompleted:(void?(^)(UserModel?*))completed{
[UserModel?loadUserDataCompleted:completed];
}
+ (void)userLogoutCompleted:(void(^)(BOOL?isSuccess))completed{
[UserModel?logoutCompleted:completed];
}
在具體實(shí)現(xiàn)的過程中驴娃,我們只需將普通項(xiàng)目中的MVC/MVVM等開發(fā)模式移步到組件中即可
完成組件提供的接口方法后奏候,在Main.xcodeproj中調(diào)用ToolsComponent組件的方式有兩種
1、通過ToolsComponent.h直接調(diào)用:
[ToolsComponent?openLoginViewControllerCompleted:^(BOOL?isSuccess) {}];
2唇敞、通過Runtime調(diào)用:
if?(NSClassFromString(@"ToolsComponent")){
void(^loginResult)(BOOL?isSuccess) = ^(BOOL?isSuccess){};
((void(*)(id,SEL,id))objc_msgSend)(NSClassFromString(@"ToolsComponent"),NSSelectorFromString(@"openLoginViewControllerCompleted:"),loginResult);
}
Tips:Runtime 調(diào)用有風(fēng)險(xiǎn)因此需要判斷組件是否存在蔗草、方法是否可用。但是使用起來會(huì)很方便無需引用太多庫疆柔,可按需引用咒精。給其他人使用靜態(tài)庫只需給對(duì)方提供ToolsComponent.h、libToolsComponent.a即可
在下一個(gè)更新中將會(huì)分析:
1旷档、組件中Bundle資源文件創(chuàng)建及具體使用過程模叙;
2、多個(gè)不同的組件間是如何通信鞋屈、組件間功能是如何相互調(diào)用的范咨。
上文中的代碼示例在這里可以下載: