浅入浅出Protocols & Extensions--Swift语法学习

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
使用了ProtocolClass在定义时:这Class里面一定要定义Protocol里面写下的methodPropertity

怎么用?

定义协议protocol name {}
如下:

protocol MustSaySomeThing {
    func hello() -> Void
    func bye() -> Void
}

那么Class 则在继承那里写下要遵守的Protocol,如下:

class Roommate: MustSaySomeThing {
    func hello() -> Void {
        //么么哒
    }
    
    func bye() -> Void{
        //再见
    }
}

遵守protocolMustSaySomeThingRoommate必!须!得!定!义!MustSaySomeThing一样的method

假如没定义hello(),就如下图产生Error:

浅入浅出Protocols & Extensions--Swift语法学习_第1张图片
error

同时,Protocol也是一种类型,于是就可以如下面代码:

//班长 必须得说话    
var BanZhang : MustSaySomeThing?

要它何用?

通过Protocol就可以构建iOS里面用得比较多的委托模式
如图:

浅入浅出Protocols & Extensions--Swift语法学习_第2张图片
委托模式

Master可以将它要执行的methodhello()通过Protocol委托出去给Detail来定义hello()里面的内容。

在Master里面定义delegate必需遵守protocol,如下就实现了delegate

var delegate : protocol?

protocol的解释就完了,下面有protocol的进阶用法。不过首先来了解一下Extension

Extension

Extension 是什么?

是Extension的使用就是能在原有的Class里面追加定义一些method或者propertity。
如图:


浅入浅出Protocols & Extensions--Swift语法学习_第3张图片
示意图

咋用?

语法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 永远不见

如上代码:
MustSaySomeThingProtocol默认定义hello()。

这样的话,Class Roommate里就可以不用定义hello()和bye()

除非你不想要Protocol默认的定义,例如bye()

参考链接:Analyzing Swift Protocol Extensions and C# Abstract Classes

你可能感兴趣的:(浅入浅出Protocols & Extensions--Swift语法学习)