登录 立即注册
金钱:

Code4App-iOS开发-iOS 开源代码库-iOS代码实例搜索-iOS特效示例-iOS代码例子下载-Code4App.com

搭建App框架(MVVM+RAC+路由)

[复制链接]
来自: H.A.N 分类: iOS精品源码 上传时间: 2019-2-22 08:41:27
Tag:

项目介绍:

搭建App框架(MVVM+RAC+路由)

如果喜欢,请给一个小星星。O(∩_∩)O谢谢!

GitHub地址

效果

images

项目的介绍

项目使用了ReactiveCocoa框架,实现了MVVM架构,使用MVVM架构主要目的是分离视图(View)和模型(Model)。

MVVM四大优点:

  1. 低耦合。视图(View)可以独立于Model变化和修改,一个ViewModel可以绑定到不同的"View"上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变。

  2. 可重用性。你可以把一些视图逻辑放在一个ViewModel里面,让很多view重用这段视图逻辑。

  3. 独立开发。开发人员可以专注于业务逻辑和数据的开发(ViewModel),设计人员可以专注于页面设计,使用Expression
    Blend可以很容易设计界面并生成xaml代码。

  4. 可测试。界面素来是比较难于测试的,而现在测试可以针对ViewModel来写

项目的搭建

1.搭建项目主框架

在这里插入图片描述

2.CocoaPods集成的第三方框架

  • AFNetworking 网络请求

  • DateTools 日期的相对处理

  • JLRoutes 路由跳转

  • JPFPSStatus 显示屏幕的帧数

  • MBProgressHUD 蒙版

  • MJExtension 字典转模型框架

  • MJRefresh 界面刷新

  • MYLayout 浮动布局

  • ReactiveCocoa 函数响应式编程

  • SDAutoLayout 简单的布局

  • SDCycleScrollVIew 无限循环轮播图

  • SDWebImage 加载图片

3.初步搭建界面

1.初始化项目
- (void)registerRoutes{

    HQTabBarController *rootVC = [HQTabBarController  tabBarControllerWithAddChildVCsBlock:^(WZXTabBarController *tabBarC) {
        
        [tabBarC addChildVC:[HQHomeViewController new] title:@"主页" normalImageName:@"tabar_zhuye2.png" selectedImageName:@"tabar_zhuye.png" isRequiredNavController:YES];
        [tabBarC addChildVC:[HQCircleFriendsViewController new] title:@"主页2" normalImageName:@"tabar_tuijian2.png" selectedImageName:@"tabar_tuijiani.png" isRequiredNavController:YES];
        [tabBarC addChildVC:[HQHomeViewController new] title:@"中间按钮" normalImageName:@"tabar_suishoupai2.png" selectedImageName:@"tabar_suishoupai.png" isRequiredNavController:YES];
        [tabBarC addChildVC:[HQFindViewController new] title:@"朋友" normalImageName:@"tabar_linxin2.png" selectedImageName:@"tabar_linxin.png" isRequiredNavController:YES];
        [tabBarC addChildVC:[HQAccountViewController new] title:@"我的" normalImageName:@"tabar_geren2.png" selectedImageName:@"tabar_geren.png" isRequiredNavController:YES];
        
    }];
    
    self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
    self.window.backgroundColor = [UIColor whiteColor];
    self.window.rootViewController = rootVC;
    [self.window makeKeyAndVisible];
//    navigation Push规则
    [[JLRoutes globalRoutes] addRoute:@"/NaviPush/:controller" handler:^BOOL(NSDictionary<NSString *,NSString *> * _Nonnull parameters) {
        
        NSLog(@"parameters==%@",parameters);
        UIViewController *v = [[NSClassFromString(parameters[@"controller"]) alloc] init];
        [self paramToVc:v param:parameters];
        [[self currentViewController] pushViewController:v animated:YES];
        return YES;
    }];
}
2.路由跳转
-(void)paramToVc:(UIViewController *) v param:(NSDictionary<NSString *,NSString *> *)parameters{
    //        runtime将参数传递至需要跳转的控制器
    unsigned int outCount = 0;
    objc_property_t * properties = class_copyPropertyList(v.class , &outCount);
    for (int i = 0; i < outCount; i++) {
        objc_property_t property = properties[i];
        NSString *key = [NSString stringWithUTF8String:property_getName(property)];
        NSString *param = parameters[key];
        if (param != nil) {
            [v setValue:param forKey:key];
        }
    }
}

/**
 *          获取当前控制器
 */
-(UINavigationController *)currentViewController{
    
    HQTabBarController *HQTabBar = (HQTabBarController *)self.window.rootViewController;
    return HQTabBar.selectedViewController;
}


- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
    NSLog(@"从哪个app跳转而来 Bundle ID: %@", options[UIApplicationOpenURLOptionsSourceApplicationKey]);
    NSLog(@"URL scheme:%@", [url scheme]);
    
#pragma mark - JLRoutes(默认的Scheme)
    
    return [[JLRoutes globalRoutes] routeURL:url];
}
- (void)urlClick{
    
    // 发送请求
    RACSignal *signal = [[[HQHomeViewModel alloc]init].requestCommand execute:@{@"code":@"Home"}];
    [signal subscribeNext:^(id x) {
        
        NSLog(@"%@",x);
        NSString *customURL = @"HQMVVMRACRouter://NaviPush/TwoViewController?name=home&userId=10000&age=18&adbc=29";
        [[UIApplication sharedApplication]openURL:[NSURL URLWithString:customURL] options:@{UIApplicationOpenURLOptionsSourceApplicationKey : @YES} completionHandler:nil];        
    }];
}

希望各位大神指出不足的地方,大家共同进步!谢谢。

相关源码推荐:

我来说两句
*滑动验证:
所有评论(5)
打个酱油的 2019-2-22 09:48:17
支持,感谢,祝code4app越来越好~
回复
莫应有道 2019-2-22 09:48:22
code4app好的内容真的很多~赞
回复
A7472 2019-2-22 09:48:47
内容很好,棒棒哒
回复
hellokenken 2019-2-22 09:49:07
code4app好的代码demo真的很多,谢谢啦~
回复
编程是什么 2019-2-22 09:49:40
不错不错,楼主辛苦了。。。
回复
bug是啥 2019-2-22 09:50:33
内容很好,棒棒哒
回复
code4app热心网友 2019-2-22 10:58:11
虽不明,但觉厉!
回复
code4app热心网友 2019-2-22 15:24:53
很给力,Code4App有你更精彩!
回复
demaxiyaKing 2019-2-22 16:31:56
正需要啊,感谢楼主无私分享!
回复
提取码:  下载次数:43 状态:已购或VIP 售价:0(原价:15)金钱 下载权限:初级码农 
1185 2 43
联系我们
首页/微信公众账号投稿

帖子代码编辑/版权问题

QQ:435399051,742864542

如何获得代码达人称号?

代码贡献英雄榜
用户名 下载数
通过邮件订阅最新 Code4App 信息
上一条 /4 下一条
联系我们
关闭
合作电话:
13802416937
Email:
435399051@qq.com
商务市场合作/投稿
问题反馈及帮助
联系我们

广告投放| 广东互联网违法和不良信息举报中心|中国互联网举报中心|Github|申请友链|手机版|Code4App ( 粤ICP备15117877号-1 )

快速回复 返回顶部 返回列表