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 金钱)