11-12月份iOS团队目标达成情况

团队目标

  • 单元测试编写
  • 路由表方案讨论

单元测试方案与代码编写

首先研究了苹果自带的XCTest,但是不是很符合。后来在网上找了些资料,由于项目是纯swift,因此选择了Quick+Nimble组合框架,其中,这两个框架,在Alamofire、Moya等swift流行框架均采用了它做为单元测试框架。
基于Quick框架,开始写测试用例,选择信e家作为测试项目,但后写登录ViewModel的测试代码,过程中也会遇到些许问题,但是都一一解决了。最后把方案与同事分享,然后一起完成了信e家的单元测试开发。因为只测试了viewModel模块,没有做UI测试,因此覆盖率不是很高:大概50%.
单元测试总结文章


路由表方案

目前,市面上主流的Router方案有三种,分别为:

其中,URL Router代表作为蘑菇街App。它是通过注册URl,然后解析URL中的host path等参数,然后拆解实现跳转。但是,注册了URL之后,会造成不必要的内存常驻,所以,不太建议此方案。
Target-Actionc方案,不需要注册,通过解析字段串,解析出目标与函数的串联,然后彩runtime机制完成调用。经对比,我们采用此方案来实现路由跳转功能。

Target-Action方案

采用CTMediator框架,主要化分为六部分,Controller、View、Model、ViewModel、Category、Target。其中Category与Target分别为路由机制相关的文件。实现如下:

category文件代码:

import CTMediator

//  1. 字符串 是类名 Target_xxx.h 中的 xxx 部分
let kCTMediatorTarget_Face = "Face"
//  2. 字符串是 Target_xxx.h 中 定义的 Action_xxxx 函数名的 xxx 部分
let kCTMediatorActionNavigaTo_pushFaceVc = "pushFaceVc"

extension CTMediator {
    
    func ylx_mediator_pushFaceVcWithParams(params: [String:Any]?) -> UIViewController {
        
        if let registerVc = performTarget(kCTMediatorTarget_Face, action: kCTMediatorActionNavigaTo_pushFaceVc, params: nil, shouldCacheTarget: false) as? UIViewController {
            return registerVc as! XYJBaseVC
        } else {
            // 这里处理异常场景,具体如何处理取决于产品
            return XYJBaseVC.init()
        }
    }
}

Target文件
.h文件
#import <Foundation/Foundation.h>

@interface Target_Face : NSObject
- (XYJFaceVC *)Action_pushFaceVc:(NSDictionary *)params;
@end
.m文件
#import "Target_Face.h"

@implementation Target_Face
- (XYJFaceVC *)Action_pushFaceVc:(NSDictionary *)params
{
    return [[XYJFaceVC alloc] init];
}
@end

然后,在壳工程中调用时,只要通过CTMdiator的分类方法中,拿到控制器,实现调用就行。至于拿到的是什么控制器,可以通过服务器下发,在category中,取到不能的target与action即可实现不同控制器的跳转。参数传递,采用的是NSDictionary方式。如果要传递的是模型,可通过ObjectMapper转字典再传递。

调度方式:
let vc = CTMediator.sharedInstance().ylx_mediator_pushFaceVcWithParams(params: nil)
self.navigationController?.pushViewController(vc, animated: true)

为什么Target要采用oc方法实现?

因为项目是swift项目,如果target用swift方式编写,那么,框架中通过字符串生成Selector会报错。因为swift的方法与oc是有区别。传参后方法名会不一样。

数据顺传逆传

顺传,可直接通过param参数直接传递过去。
逆传:

  • 通过CTMediator分类拿到控制器后,直接对控制闭包或block赋值实现数据逆传。
  • 通过Target中,return控制器前,对闭包或block赋值实现数据逆传。

路由更新方案

  • 路由表下发情况

    • key:value数组的形式,key为类名,value为上述的Target/Action拼接字符串
  • 路由表下发更新缓存方案

    • app每次进入前台,都会获取一下路由配置信息。 如果本地没有版本信息,则把路由配置信息保存到本地,并赋值给单例对象(存放运行内存中,提高效率)。如果有,比较版本号,如果请求的版本号大于本地的,则替换缓存并赋值给单例。如果等于,则直取本地的。
  • 路由表读取跳转方案

    • 因为路由表是key value形式,如果读取key,取出来的值为空,则按默认正常业务逻辑跳转。如果有值,但是取出来的值,按路由方案读取得到的类不存在,还是按默认业务逻辑跳转,否则按路由表取出来的值跳转。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容

  • 用到的组件 1、通过CocoaPods安装 2、第三方类库安装 3、第三方服务 友盟社会化分享组件 友盟用户反馈 ...
    SunnyLeong阅读 14,499评论 1 180
  • How to play: > Tap to flap your wings and fly > Dodge the...
    lalallaaa阅读 222评论 0 0
  • 今年是东家200年生日,于是就有了一个电子喷泉。宣传是说不管是谁,可以用手机对着喷泉许愿,然后愿望会实现。我看过宣...
    小三爪阅读 260评论 0 0
  • 想写是种心情,不是逃离现实,是给心一方宁静地,一条静静的归途,是自己无人可靠,别人不理解自己荒唐可笑时,一个蜗居。...
    橄榄枝枯萎后的和平阅读 187评论 0 1