每天一点swift(一)代理,协议

@IBDesignable 

只要写在自定义的UIView的文件里面就好了!

这个关键字,可以将自定义的UIView绘制在storyBoard上面,也就是说在还没有运行时候,在SB上就显示出来。

@IBInspectable

在自定义UIView的某些属性前面写上这个关键字,那么这些属性就会出现在SB的Inspector面板上,可以随时调整。

每天一点swift(一)代理,协议_第1张图片

viewCOntroller的工作,就是为view解释model

扩展:

1.加入到扩展的必须是以前没有的属性,方法,或者类。因为扩展不能用来覆盖以前的东西。

2. 加入的属性必须是计算属性,不能为存储属性

3. 扩展主要是用来写一些helper的函数,用来将功能进行分类,并增强代码的可读性

协议:

1. 是用来简化API的,因为我们不想直接拿到一个类的所有方法,我只需要你一部分的API

2. 协议是一个数据类型,所以协议可以成为函数的参数,赋值一个变量等

3. 仅用来申明变量和方法,并不实现他们


每天一点swift(一)代理,协议_第2张图片

4.继承协议的类的init()方法前面必须加required关键字


每天一点swift(一)代理,协议_第3张图片

代理:

1.代理用于view和controller之间,代理描述了这个view需要别人(controller)帮它做的事情。

2. 在view中创建一个代理属性,并且这个属性的数据类型 = 你的代理协议

3. 用这个代理属性在view里面去做view不能控制的事情,例如;通过代理属性来获取数据

4.controller实现协议,并成为view的代理


注意:这里的协议后面一定要:class 这样就表示协议只能被class实现,否则下面创建代理属性时,用weak会报错。

下面这句话就是让代理给view数据

cmd+shift+o 通过文件名快速查找文件

每天一点swift(一)代理,协议_第4张图片


每天一点swift(一)代理,协议_第5张图片

这里的happiness是model,它向viewController提供数据,然后当数据发生变化,viewcontroller就让faceview去重绘。

那么当faceview重绘的时候,faceview就问他的代理(controller)要数据,controller就通过smilenessForFaceView方法给view解析model的数据,然后返回view想要的数据。
也就是说:smilenessForFaceView这个方法是faceview来决定什么时候调用的。

你可能感兴趣的:(每天一点swift(一)代理,协议)