请选择 进入手机版 | 继续访问电脑版
源码天堂 设为首页 收藏本站
开启辅助访问 切换到宽版

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

切换风格 立即注册 找回密码

IOS教程网

新浪微博达人勋

2513

积分

306

金钱

0

广播

Rank: 6Rank: 6

积分
2513

社区QQ达人最佳新人活跃会员热心会员推广达人

发表于 2018-3-5 10:57:20 | 显示全部楼层 |阅读模式
分享到:

仿凤凰FM iOS客户端

仿凤凰FM iOS客户端是出于3个目的 1>理解网络请求 2>理解reactiveCocoa 3>理解MVVM

网络请求

凤凰FM的http请求返回数据为JSON格式,可以用Chalse轻松抓取到这些http请求,具体的请求信息在FenghuangFM/HTTPRequest下边。 http请求返回为JSON格式的数据,解析JSON用到了MJExtension库,JSON中有list时,使用如下方式告知JSON中key为"Audiolist"的list中每个元素是”Audio“类型。

[ActivityModel mj_setupObjectClassInArray:^NSDictionary *{    return @{        @"audiolist":@"Audio"    };}];

另外返回的JSON中key可能会以"new"开头,而我们定义模型时成员变量使用new开头会报错,这时需要将JSON中的key转换成模型中的成员变量名,

[LeaderBoardData mj_setupReplacedKeyFromPropertyName:^NSDictionary *{    return @{        @"newsList":@"newList"    };}];reactiveCocoa

reactiveCocoa在这里的应用和网络请求结合在了一起,载入主页时,需要发出两个http请求,等待这两个请求都回返结果后再继续下一步,reactiveCocoa可以非常简单地完成这个动作,

MainFeatureViewModel.m

- (void)refreshDataSource{    @weakify(self);    RACSignal *signalFocus = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {    @strongify(self);    [self requestFocusList:^{        [subscriber sendNext:nil];    }];        return nil;    }];    RACSignal *signalRest = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {    @strongify(self);    [self requestRest:^{        [subscriber sendNext:nil];    }];    return nil;    }];    [[RACSignal combineLatest:@[signalFocus,signalRest]] subscribeNext:^(id x) {    @strongify(self);    [(RACSubject *)self.updateContentSignal sendNext:nil];    }];}MVVM

MVVM解放了MVC框架中繁杂庞大的ViewController。原来的ViewController中包含了"Views+业务",现在MVVM使用ViewModel将业务这部分转移了出来,瞬间使ViewController的体量降了下来。看一下主页用到的一个ViewModel:

MainFeatureViewModel.h

@interface MainFeatureViewModel : NSObject@property (nonatomic, readonly) RACSignal                   *updateContentSignal;@property (nonatomic, strong)   MainFeatureModel            *featureModel;@property (nonatomic, strong)   RecommendModel              *recommendModel;- (void)refreshDataSource;- (NSInteger)numberOfSections;- (NSInteger)numberOfItemsInSection:(NSInteger)section;- (CGFloat)heightForRowAtIndex:(NSIndexPath *)indexPath;@end

数据模型MainFeatureModel和RecommendModel相关的操作脱离了VC转移到了这里,在MainFeatureController中,只要通过viewModel属性就可以获取到数据。

@property (nonatomic, strong)   MainFeatureViewModel    *viewModel;
源码下载:http://code.662p.com/view/16065.html

新浪微博达人勋

1379

积分

5

金钱

0

广播

Rank: 6Rank: 6

积分
1379
发表于 2018-3-5 11:00:19 | 显示全部楼层
高手云集 果断围观

新浪微博达人勋

1322

积分

0

金钱

0

广播

Rank: 6Rank: 6

积分
1322
发表于 2018-8-5 07:23:11 | 显示全部楼层
元芳你怎么看?

新浪微博达人勋

487

积分

28

金钱

0

广播

Rank: 3Rank: 3

积分
487
发表于 2018-8-22 09:25:26 | 显示全部楼层
看看......

新浪微博达人勋

1382

积分

0

金钱

0

广播

Rank: 6Rank: 6

积分
1382
发表于 2018-8-26 21:00:53 | 显示全部楼层
看起来不错

新浪微博达人勋

444

积分

2

金钱

0

广播

Rank: 3Rank: 3

积分
444
发表于 2018-9-4 14:52:56 | 显示全部楼层
看看......
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

小黑屋|手机版|Archiver|IOS教程网. ( 粤ICP备12089784号  

GMT+8, 2018-9-22 07:34 , Processed in 0.237124 second(s), 41 queries .

Powered by Discuz X3.1

© 2001-2013 IOS教程网

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