浅入浅出Protocols & Extensions--

作者: 莫威權在B612等着那温柔的风 | 来源:发表于2015-11-27 13:07 被阅读1816次

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:

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

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

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

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

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

相关文章

  • 浅入浅出Protocols & Extensions--

    Swift Syntax L2 -- Udacity 笔记 目录:1.浅入浅出Optional type2.浅入浅...

  • 深入浅出、深入深出、浅入浅出、浅入深出

    伊川思源实验学校 张文明 在网上读到这样一段话:世界上有四种老师,第一种是讲课能深入浅出,很深...

  • keystone浅入浅出

    在OpenStack的框架体系中Keystone的作用类似于一个服务总线,为OpenStack提供身份管理服务(I...

  • 《浅入浅出》-RocketMQ

    你知道的越多,你不知道的越多 点赞再看,养成习惯 本文GitHub https://github.com/Java...

  • 浅入浅出zookeeper

    zookeeper是我们日常开发中每天都能接触到的组件,但是好像很多人对其缺乏了解,所以心血来潮写了这篇文章。首先...

  • JVM浅入浅出

    说是浅入浅出,其实还是需要在入和出的过程中,进行一个深入的了解。在了解JVM之前,我其实是从比较常见的JVM面...

  • 世上有四种老师――顾明远

    1、深入浅出――轻负高效 2、深入深出――重负高效 3、浅入浅出――轻负低效 4、浅入深出――重负低效

  • 深入浅出

    文章有四种境界:深入浅出,深入深出,浅入浅出,浅入深出。深入浅出是最高境界,也最难。 没有对所论事物的深刻认识做不...

  • 浅入浅出Closures Expressions -- Swif

    Swift Syntax L3 -- Udacity 笔记 目录:1.浅入浅出Optional type2.浅入浅...

  • 浅入浅出监控系统

    如何搭建一个监控系统 生产环境必须是可监控的,一个对开发者黑盒的线上应用无异于灾难。 采集数据 保存数据 可视化数...

网友评论

本文标题:浅入浅出Protocols & Extensions--

本文链接:https://www.haomeiwen.com/subject/qfpdhttx.html