Swift Syntax L2 -- Udacity 笔记
目录:
1.浅入浅出Optional type
2.浅入浅出Protocols & Extensions(所在章节)
3.浅入浅出Closures Expressions
以上章节简介:浅入浅出Swift语法
Protocols & Extensions
前言
Protocol是实施委托模式
的基础
好了开始写Protocol的笔记了.
文章结构:
Protocol:
1.什么是Protocol?
2.怎么用?
3.要它何用?
Extension:
1.Extension有什么用?
2.咋用?
Protocol的进阶用法:
利用Extension提供method的default定义
首先来一个问题
什么是Protocol?
Protocal
中文翻译为协议
就是双方必需准守的意思。
Protocol
主要是用来规定Class
使用了Protocol
的Class在定义时:这Class里面一定要定义Protocol
里面写下的method
和Propertity
怎么用?
定义协议protocol name {}
如下:
protocol MustSaySomeThing {
func hello() -> Void
func bye() -> Void
}
那么Class 则在继承那里写下要遵守的Protocol,如下:
class Roommate: MustSaySomeThing {
func hello() -> Void {
//么么哒
}
func bye() -> Void{
//再见
}
}
遵守protocolMustSaySomeThing
的Roommate
必!须!得!定!义!跟MustSaySomeThing
一样的method
假如没定义hello()
,就如下图产生Error:
同时,Protocol也是一种类型,于是就可以如下面代码:
//班长 必须得说话
var BanZhang : MustSaySomeThing?
要它何用?
通过Protocol
就可以构建iOS里面用得比较多的委托模式
如图:
Master可以将它要执行的methodhello()
通过Protocol委托出去给Detail来定义hello()
里面的内容。
在Master里面定义delegate必需遵守protocol,如下就实现了delegate
var delegate : protocol?
protocol的解释就完了,下面有protocol的进阶用法。不过首先来了解一下Extension
Extension
Extension 是什么?
是Extension的使用就是能在原有的Class里面追加定义一些method或者propertity。
如图:
咋用?
语法extension 要添加的Class的名字 {}
例如,为上面的Roommate类添加thankU method
extension Roommate{
func thankU() -> Void{
//谢谢你
}
}
let me = Roommate()
me.thankU()//谢谢你
到这里,关于Protocol&Extension的基本用法就介绍完了。下篇文章将介绍Swift Closure的用法与及缩略的写法
接下来就是高阶用法:利用Extension提供method的default定义
Protocol的进阶用法:
利用Extension提供method的默认(default)定义:
使用语法:extension Protocol的名字{}
然后就是看代码:
protocol MustSaySomeThing {
func hello() -> Void
func bye() -> Void
}
extension MustSaySomeThing{
func hello() -> Void{
//么么哒
}
func bye() -> Void{
//再见
}
}
class Roommate: MustSaySomeThing {
func bye() -> Void{
//good bye 永远不见
}
}
let me = Roommate()
me.hello() //么么哒
me.bye() //good bye 永远不见
如上代码:
将MustSaySomeThing
Protocol默认定义hello()。
这样的话,Class Roommate里就可以不用定义hello()和bye()
除非你不想要Protocol默认的定义,例如bye()
参考链接:Analyzing Swift Protocol Extensions and C# Abstract Classes