关于MVC、关于面向对象、关于面向接口,一个半项目的收获

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
查看查看205 回复回复8 收藏收藏 分享淘帖 转播转播 分享分享 微信
查看: 205|回复: 8
收起左侧

关于MVC、关于面向对象、关于面向接口,一个半项目的收获

[复制链接]
悔哥 发表于 2016-7-23 13:38:11 | 显示全部楼层 |阅读模式
快来登录
获取最新的苹果动态资讯
收藏热门的iOS等技术干货
拷贝下载Swift Demo源代码




0、概述

关于面向对象:三大特点:封装、继承、多态。

关于MVC框架:注意这里是框架,而不是设计模式;M是指业务模型,V是指用户界面,C则是控制器。

关于面向接口:在iOS里就是面向协议。

关于MVC、关于面向对象、关于面向接口,一个半项目的收获 1

关于MVC、关于面向对象、关于面向接口,一个半项目的收获 - 敏捷大拇指 - 关于MVC、关于面向对象、关于面向接口,一个半项目的收获 1


我认为:这三个,是新手开发人员 需要理解的,即使是多年程序员 也需要深入理解。

如果这三点理解个50%,自己封装个组件毫无问题。当然,组件的要求是 耦合度要低,在view中不要有任何请求服务器数据,在接口中尽量不要带有view的参数,当然不是绝对的。

关于MVC、关于面向对象、关于面向接口,一个半项目的收获 2

关于MVC、关于面向对象、关于面向接口,一个半项目的收获 - 敏捷大拇指 - 关于MVC、关于面向对象、关于面向接口,一个半项目的收获 2


昨天思考了一下,总结了自己一个半项目的收获,写了一份demo(在本帖后面可以下载demo源代码),目的是:高内聚、低耦合。希望得到敏捷大拇指的各路大神点评。

下面具体解析一下,我的思路。




1、创建Controller基类

首先、我创建了一个TSBaseViewController 这个基类,这个类干了什么事呢?


1.1、声明了一个无参工厂

个人喜好,当然你可以不声明,直接用:alloc init


1.2、声明了一个AppDelegate类型的属性,写了lazy loading。

怎么说呢,因为appdelegate的声明周期所决定的。只要app不退出,appdelegate就不会销毁。


1.3、声明了三个函数 initSubviews loadCacheData loadNetData

这三个只是公开函数,因为每个控制器 都要做的两件事:初始化子视图 加载数据,所以就写了这三个。


1.4、在viewWillAppear这个函数中 设置了

[Swift] 纯文本查看 复制代码
navigationController?.navigationBar.translucent = false


导航栏不透明,这样避免了64的高度误差。




2、创建View基类

其次,我创建了一个TSBaseTableView 所有tableview的基类,这个基类又干了什么事呢?


2.1、声明了集中有参类初始化


2.2、设置一些属性

重点是 设置

[Swift] 纯文本查看 复制代码
dataSource = self delegate = self



2.3、声明了几个个公开的函数

[Swift] 纯文本查看 复制代码
internal func firstLoadData(data: AnyObject?)
internal func updateData(data: AnyObject?)
internal func updateData(data: AnyObject? ,indexPath: NSIndexPath)
internal func appendData(data: AnyObject?)


具体实现看demo(本帖后面可以下载demo源代码)。


2.4、最重要的来了  三问一答 错 是2答

基于第三问,我创建了一个 TSBaseTableViewCell这个所有cell的基类。

在这个基类中,我除了声明了类初始化函数,还有两个函数:一个是cell工厂,一个是cell高度工厂。

对于这个cell的基类,我需要一个协议,是脑补一下所有可能的cell点击事件。

具体代码看demo(本帖后面可以下载demo源代码)。

我在第三问的代码如下:

[Swift] 纯文本查看 复制代码
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        
        let cell: TSBaseTableViewCell = TSBaseTableViewCell.baseTableViewCell(cellType, data: dataArray![indexPath.row], indexPath: indexPath) as! TSBaseTableViewCell
        
        cell.mDelegate = self
        
        cell.updateData(dataArray![indexPath.row])
        
        return cell
    }


对于大部分界面来说  我需要去关心数组里的数据是什么model 还是json么?  不需要 所以我传了 id类型的参数  我认为vc view 之间 只是数据的传递

写代码 写的是逻辑


2.5、一答

这是苹果提供给的接口,不是我想要的接口,所以……我需要一个自己的接口TSBaseTableViewDelegate,基于这个接口,我写了一个枚举TSItemClickType。

写了如下函数:

[Swift] 纯文本查看 复制代码
@objc protocol TSBaseTableViewDelegate: class {
   
    func onItemClickType(itemClickType: String? ,data: AnyObject? ,indexPath: NSIndexPath?)
    optional
    func onLoadNewNetData()
    optional
    func onLoadMoreNetData()
}



2.6、实现cell的代理方法

上面我已经设置了

[Swift] 纯文本查看 复制代码
cell.delegate = self


我要实现cell的代理方法,通过协议把事件抛回给vc处理。




3、声明某Controller类

最后,我声明了一个TestViewController,继承自TSBaseViewController。

实现了一些方法,达到了一些神奇的效果。




4、demo源代码下载

车库咖啡.zip (58.28 KB, 下载次数: 2, 售价: 20 金钱)

都看到这里了,就把这篇资料推荐给您的好朋友吧,让他们也感受一下。

回帖是一种美德,也是对楼主发帖的尊重和支持。

*声明:敏捷大拇指是全球最大的Swift开发者社区、苹果粉丝家园、智能移动门户,所载内容仅限于传递更多最新信息,并不意味赞同其观点或证实其描述;内容仅供参考,并非绝对正确的建议。本站不对上述信息的真实性、合法性、完整性做出保证;转载请注明来源并加上本站链接,敏捷大拇指将保留所有法律权益。如有疑问或建议,邮件至marketing@swifthumb.com

*联系:微信公众平台:“swifthumb” / 腾讯微博:@swifthumb / 新浪微博:@swifthumb / 官方QQ一群:343549891(满) / 官方QQ二群:245285613 ,需要报上用户名才会被同意进群,请先注册敏捷大拇指

嗯,不错!期待更多好内容,支持一把:
支持敏捷大拇指,用支付宝支付10.24元 支持敏捷大拇指,用微信支付10.24元

评分

参与人数 1金钱 +10 贡献 +10 专家分 +10 收起 理由
Anewczs + 10 + 10 + 10 大赞原创!牛!

查看全部评分

 楼主| 悔哥 发表于 2016-8-12 14:37:57 | 显示全部楼层
新增 发布博客 添加图片 和 删除图片

ChekuCafe.zip

1.47 MB, 下载次数: 0, 下载积分: 金钱 -1

评分

参与人数 1金钱 +10 贡献 +10 专家分 +10 收起 理由
Anewczs + 10 + 10 + 10 32个赞!专家给力!

查看全部评分

 楼主| 悔哥 发表于 2016-7-23 22:06:07 | 显示全部楼层
Anewczs 发表于 2016-7-23 16:32
三问2答是什么?

三问是基于 UITableViewDataSource  (多少个分区 每个分区有多少行  每行的cell 是什么样子的)
两答是基于UITableViewDelegate  (点击cell事件  和  杭高)
Anewczs 发表于 2016-7-23 16:32:13 | 显示全部楼层
三问2答是什么?
fasoal 发表于 2016-7-24 19:27:11 | 显示全部楼层
楼主的例子中的表格行如果不用系统的cell就更好了
代码买卖 发表于 2016-7-25 02:58:27 | 显示全部楼层
下载看看~
 楼主| 悔哥 发表于 2016-7-25 10:16:49 | 显示全部楼层
fasoal 发表于 2016-7-24 19:27
楼主的例子中的表格行如果不用系统的cell就更好了

今天晚点更新一下。。。。主要是时间。。。自己总结的时间太少了
firefighter 发表于 2016-7-26 14:11:55 | 显示全部楼层
悔哥 发表于 2016-7-25 10:16
今天晚点更新一下。。。。主要是时间。。。自己总结的时间太少了

期待。
 楼主| 悔哥 发表于 2016-7-26 21:07:55 | 显示全部楼层
更新了一点东西。。。 明天有时间 会更新一个功能  照片多选 然后上传到 七牛。。



车库咖啡.zip

1.21 MB, 下载次数: 0, 下载积分: 金钱 -1

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

做任务,领红包。
我要发帖

分享扩散

都看到这里了,就把这资料推荐给您的好朋友吧,让他们也感受一下。
您的每一位朋友访问此永久链接后,您都将获得相应的金钱积分奖励
热门推荐

合作伙伴

Swift小苹果

  • 北京治世天下科技有限公司
  • ©2014-2016 敏捷大拇指
  • 京ICP备14029482号
  • Powered by Discuz! X3.1 Licensed
  • swifthumb Wechat Code
  •   
快速回复 返回顶部 返回列表