Swift4-有妖气漫画精仿框架部分

Swift4-有妖气漫画精仿框架部分

不织布局的Swift已经更新到4.0了,对于绝大多数的iOS开发可能还停留在OC的阶段,这个已经完全落后了,但是毕竟4.0刚刚出来,网上是有不少的案例分析,版本之间的对比,但是都是比较零散的东西,很少有一套完整的项目,不适合初学者来开发学习,并且网上都比较流行的响应式变成也就是借助RXSwift等响应式框架来构造项目,但是相对的来说,这个起步就比较高了,应为响应式属于比较高级的阶段性内容,只能作为加分项,并不能作为必学项
但是很多新的开发者就会盲目的学习,甚至手上都没有写过一个完整的项目就认为已经完全掌握了Swift的基础,就已经开始了响应式的学习.这个其实就有点本末倒置了.
Swift已经更新到4.0的版本了,已经趋于稳定了,所以说实在的,需要一个近乎完整的项目来感受一下其优缺点和对比OC的不同,甚至是其他语言的不同和相同点,毕竟未来Swift肯定是趋势

所以在工作之余,抽空整理了一个比较完整的Swift4的仿写项目,Swift4出来才两个月左右,我也算是比较积极的了.
之余之前的老版本的内容就不贡献给大家了,需要修改的东西比较多,甚至还有可能跑不起来....

此篇系列也算是个基础系列,不牵扯到响应式编程等高级知识,为的是方便大家学习,能够最快的以此进入工作中去,毕竟工作环境的需求不可能完全保证你能够使用那些,但是基础的普通开发肯定是不变的

废话不啰嗦了,
之所以选择这个项目,有以下几点原因,

  1. 相对来说http的抓包解析更简单一点
  2. 相对正规的不复杂的模块架构
  3. 接口数据的合理(很多app的接口数据真心臃肿混乱)
  4. 界面的风格主题更让人愿意接受学习

既然是一个完整的项目,那么肯定需要优先搭载框架部分
如何合理的搭建框架是需要时间去规划的,并不是拿到项目的第一时间就想到什么地方就写什么地方,这样在后期由于框架的不健壮,会出现维护的难度上升的情况...

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

我们可以看到,项目是比较传统的4个大模块的类型
首页+分类+书架+我的

其中 首页会细分成推荐+vip+订阅+排行,但是这部分是固定的还是由服务端控制的,暂时先不研究. 总之这部分算是一个在线推荐的模块
其次,是分类模块 也算是一个在线推荐的模块 但是其会更加的细化类别
我们可以把这两个模块合并在一起,也可以按照固有样式分开,这个可以在开发的时候进行调整

当然首页和分类都会有一个搜索的入口,我们需要单独在分出一个搜索的模块
可能次模块内容比较复杂,也可能比较简单,但是单独归整成一个模块是有必要的
再次是书架模块 大致分成收藏+书单+下载 此模块相对偏向绑定用户,是一个完整的用户的离线在线的书架
最后是我们所有开发都会拥有的个人模块,没有什么可以说的
大的可以看到的大致是这样
但是经过考虑 你肯定会想到,这是一个漫画类应用,那么肯定就会有一个通用的漫画列表和漫画详情乃至最后的漫画阅读应该作为一个漫画模块


这里写图片描述

我们只有在写完整项目的时候有限构思好框架和逻辑,那样我们才能更合理的规划整个框架的构造

这里写图片描述

另外无论整个项目是使用MVC亦或者是MVVM来事项项目中的模块
首先从文件路径来划分模块,

  • API用作项目的接口部分
  • Model用作项目中的模型
  • Component是组件部分,这部分中包含项目中遇到的自己扩展出来的共用控件,亦或者继承或者优化的第三方控件,比如刷新控件,加载控件...这部分可以视作自定义控件或者组件的模块
  • Extension是用来扩展一些基础的类,比如Array....这部分将来可以用在其他项目中
  • Produce是整个有妖气漫画的模块主题部分,从项目最初的入口,及各个模块的划分,另外一个Global可能会用来存储一些常量 通用的一些方法等

作为一个展示类的项目,和大多数其他APP一样,无非都是些首页,列表页,详情页,这些页面虽然独立存在,但是都会有着关联,比如使用同样的头部,大致的界面效果,乃至同样的判断逻辑等
所以我们有必要创建某些基类,无论是用作当前的开发,还是以后的扩展,都是值得的


这里写图片描述

所以你能在项目中看到这样的部分,基类的视图控制器,基类的表格cell等,这些是我们在项目开发中最常用到的控件,所以我们最好使用这些,而不是直接使用系统的原始的,这样方便我们做一些扩展
当然,作为Swift,我们也可以不使用这样的方式,Swift即使面向对象的开发模式,也是面向协议的开发模式,我们也可以创建协议,或者Extension来扩展系统原来的方法,当然,这些是后话,我们还是要从基础做起
再接下来就是整个项目的模块部分,这部分都是在需要的时候再向里面填充,

另外作为一个iOS开发,还是很推荐使用Cocoapods的,使用其来管理和维护第三方库,会更加的方便

OK,至此,整个目录框架大致解说完毕

那么框架肯定不仅仅是这么简单,
我们还需要代码层次上的框架


这里写图片描述

很显然的作为一个比较传统样式的项目,其开发模式最好的方式就是使用TabBar作为根视图,在其基础上,控制多个Navigation来管理界面层级
但是我们可以很轻易的看到,首页和书架都是一个多选页面,所以其本身应该是一个Page,来负责管理多个平级的界面

所以总的基础的tabBar的逻辑应该可以抽去出来成大概这样的

import UIKit

class UTabBarController: UITabBarController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        tabBar.isTranslucent = false
        
        /// 首页
        let onePageVC = UHomeViewController(titles: ["推荐",
                                                     "VIP",
                                                     "订阅",
                                                     "排行"],
                                            vcs: [UBoutiqueListViewController(),
                                                  UVIPListViewController(),
                                                  USubscibeListViewController(),
                                                  URankListViewController()],
                                            pageStyle: .navgationBarSegment)
        addChildViewController(onePageVC,
                               title: "首页",
                               image: UIImage(named: "tab_home"),
                               selectedImage: UIImage(named: "tab_home_S"))
        
        
        /// 分类
        let classVC = UCateListViewController()
        addChildViewController(classVC,
                               title: "分类",
                               image: UIImage(named: "tab_class"),
                               selectedImage: UIImage(named: "tab_class_S"))
        
        
        /// 书架
        let bookVC = UBookViewController(titles: ["收藏",
                                                  "书单",
                                                  "下载"],
                                         vcs: [UCollectListViewController(),
                                               UDocumentListViewController(),
                                               UDownloadListViewController()],
                                         pageStyle: .navgationBarSegment)
        addChildViewController(bookVC,
                               title: "书架",
                               image: UIImage(named: "tab_book"),
                               selectedImage: UIImage(named: "tab_book_S"))
        
        
        /// 我的
        let mineVC = UMineViewController()
        addChildViewController(mineVC,
                               title: "我的",
                               image: UIImage(named: "tab_mine"),
                               selectedImage: UIImage(named: "tab_mine_S"))
    }
    
    func addChildViewController(_ childController: UIViewController, title:String?, image:UIImage? ,selectedImage:UIImage?) {
        
        childController.title = title
        childController.tabBarItem = UITabBarItem(title: nil,
                                                  image: image?.withRenderingMode(.alwaysOriginal),
                                                  selectedImage: selectedImage?.withRenderingMode(.alwaysOriginal))
        
        if UIDevice.current.userInterfaceIdiom == .phone {
            childController.tabBarItem.imageInsets = UIEdgeInsetsMake(6, 0, -6, 0)
        }
        addChildViewController(UNavigationController(rootViewController: childController))
    }
    
}

止于此,整个项目的基础模块框架已经搭建完毕了

欢迎访问完整项目地址: https://github.com/spicyShrimp/U17
整个项目90%精仿原版APP,适合大家学习交流

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

推荐阅读更多精彩内容