swift中使用protocol声明一个协议接口

swift中类、枚举和结构体都可以实现协议接口

swift中类中的方法都可以修改成员变量的值

swift中结构体中的方法默认是不能修改成员变量的,添加mutating关键字后就可以修改了

swift中使用extension来为现有的类型添加功能。你可以使用扩展来给任意类型添加协议,甚至是你从外部库或者框架中导入的类型

swift中协议接口的委托代理模式和Objective-C基本上是一样的,都是主方设置一个代理人,然后将事情的处理委托给这个代理人去办,而主方自己只需要声明协议的规则即可。记住,代理人必须按照主方设定的规则去处理这些需要做的事情。不管代理人是谁,只要遵从协议就可以成为主方的委托者。

Swift 中的扩展可以:
1. 添加计算型属性和计算静态属性
2. 定义实例方法和类型方法
3. 提供新的构造器
4. 定义下标
5. 定义和使用新的嵌套类型
6. 使一个已有类型符合某个接口

具体举例如下:

//声明一个ExampleProtocol协议,有一个成员变量和一个默认必须实现的方法

//声明一个协议
protocol ExampleProtocol{ //声明一个成员变量,并设置一个getter方法
var simpleDescription:String{get} mutating func adjust()
}

//定义一个SimpleClass类继承ExampleProtocol协议

//定义一个类继承协议
class SimpleClass: ExampleProtocol { var simpleDescription:String = "A very simple class" func adjust() {
simpleDescription += " adjust"
}
}
var simpleclass = SimpleClass() //创建对象
simpleclass.adjust() //实现下一中的必须实现的方法
simpleclass.simpleDescription //用get方法获取属性值 "A very simple class adjust"

//定义一个SimpleStruct结构体继承ExampleProtocol协议

//定义一个结构体继承协议
struct SimpleStruct:ExampleProtocol { var simpleDescription:String = "A very simple struct" //必须用关键词mutating修饰,才能修改属性值
mutating func adjust() {
simpleDescription += "struct"
}
}
var simplestruct = SimpleStruct() //创建结构体成员变量
simplestruct.adjust() //实现下一中的必须实现的方法
simplestruct.simpleDescription //用get方法获取属性值 "A very simple structstruct

---------------------------------------------------------------------------------------------------------

//声明一个Myprotocol协议,有一个成员变量和一个默认必须实现的方法,还有一个可选的方法

//定义一个有可选方法的协议
@objc protocol MyProtocol{ //声明一个成员变量,并设置一个getter和setter方法
var contentDescription:String {get set} func method() //可选的方法
optional func adjust()
}

//定义一个Boy类继承Myprotocol这个协议

class Boy:MyProtocol{

    var contentDescription:String = "he is a boy"
//实现可选的方法
func method() {
contentDescription += ",good dood study"
}
//实现必须实现的方法
func adjust(){
contentDescription += ",okay"
}
}
let boy = Boy()
boy.contentDescription = "Tom" //set方法赋值
boy.method() //实现必须实现的方法
boy.adjust() //实现可选的方法
boy.contentDescription //get方法取值 "Tom ,good good study,okay"

---------------------------------------------------------------------------------------------------------

//定义一个扩展继承ExampleProtocol协议

//定义一个类扩展
extension Int:ExampleProtocol{
var simpleDescription:String{
return "The number \(self)"
} mutating func adjust(){
self +=
}
}
.simpleDescription //

//自定义一个扩展

swift:入门知识之协议与扩展的更多相关文章

  1. Httpd服务入门知识-http协议版本,工作机制及http服务器应用扫盲篇

    Httpd服务入门知识-http协议版本,工作机制及http服务器应用扫盲篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Internet与中国 Internet最早来源于美 ...

  2. Java web 入门知识 及HTTP协议详解

     Java  web  入门知识 及HTTP协议详解 WEB入门 WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. Internet上供外界访问的Web资 ...

  3. Swift - 2 (?和!、结构体、类、协议、扩展、闭包)

    1> 可选类型(?)和强制解包(!) 在swift中,可选类型(?) 其根源是一个 枚举型,里面有 None 和 Some 两种类型.其实所谓的 nil 就是 Optional.None , 非 ...

  4. 豆知识( DNS; HTTP入门;网络协议)

    DNS入门知识 DNS服务器 通过DNS服务器,才能知道某个域名的IP地址到底是什么. Linux系统里面,DNS服务器的IP地址保存在/etc/resolv.conf文件 使用工具软件dig可以查询 ...

  5. zabbix入门知识

    zabbix入门知识 zabbix中文手册 https://www.zabbix.com/documentation/3.4/manual/ 1.zabbix介绍 Zabbix 是一个企业级的分布式开 ...

  6. Web安全之Web 安全介绍与基础入门知识

    web安全介绍与基础入门知识 安全与安全圈 甲方与乙方 甲方:如腾讯,阿里等需要安全服务的公司 乙方:提供安全服务产品的服务型安全公司 web与二进制 web,研究web安全 二进制,研究如客户端安全 ...

  7. swift学习笔记之-协议

    //协议(Protocols) import UIKit /*协议(Protocols) 1.协议定义了一个蓝图,规定了用来实现某一特定任务或者功能的方法.属性,以及其他需要的东西 2.类.结构体或枚 ...

  8. Swift入门篇-闭包和函数

    今天主要是给大家分享的是 swift中闭包的用法,我个人觉得闭包就是函数的简写方法,如果您函数不是很熟悉请查阅 swift入门篇-函数 1:函数类型 函数类型 var 变量 :(类型)->返回值 ...

  9. Swift入门篇-循环语句

    今天早上一起来所有新闻都是报道荷兰5-1战胜西班牙,我一看没有搞错吧,顿时想都如果中国队vs荷兰队也不至于会输的怎么惨吧,难道是荷兰队开挂了,于是我看了一下昨天比赛的视频直播,还真是新闻报道的那样,顿 ...

随机推荐

  1. AUTH过程

    INITIALIZE UPDATE: 在安全通道的显式发起期间,INITIALIZEUPDATE命令用于在卡和主机之间传送卡和会话数据.这个命令开始一个安全通道会话的发起. CPURESET() // ...

  2. Python使用SMTP发送邮件[HTML格式、送带附件]

    SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式. python的smtplib提供了一 ...

  3. OS X 使用技巧——轻松地调整窗口大小

    如果你想调整窗口大小,只需要把鼠标指针悬停在窗口边框上.当它变成双向箭头时,点击并拖动鼠标即可完成这一操作. 但在实际操作中,迅速把鼠标指针定位到边框上比较困难. 解决的办法是:在终端输入以下命令: ...

  4. angular 嵌套实现树结构 ng-repeat ng-include

    效果图 ang.html <!doctype html><html lang="en"><head>    <meta charset=& ...

  5. java 命名代码检查-注解处理器

    命名代码检查 根据 <Java 语言规范( 第 3 版 ) > 中第6.8节的要求, Java 程序命名应当符合下列格式的书写规范: 类 ( 或接口 ) : 符合驼式命名法, 首字母大写. ...

  6. 02.XMemcached的使用

        关于XMemcached的介绍或文档请参考:https://code.google.com/p/xmemcached/wiki/User_Guide_zh     关于Memcached的命令 ...

  7. hdu 4858 项目管理 图的分块

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4858 我们建造了一个大项目!这个项目有n个节点,用很多边连接起来,并且这个项目是连通的!两个节点间可能 ...

  8. .NET设计模式(16):模版方法(Template Method)(转)

    摘要:Template Method模式是比较简单的设计模式之一,但它却是代码复用的一项基本的技术,在类库中尤其重要. 主要内容 1.概述 2.Template Method解说 3..NET中的Te ...

  9. 《EnterLib PIAB深入剖析》系列博文汇总_转

    转: http://www.cnblogs.com/artech/archive/2008/08/08/1263418.html

  10. MYSQL注入天书之后记

    后记 对于工具的看法: 我之所以在每个例子中只写了几个示例,是因为我希望你能通过这一两个示例举一反三将其他的列出来.如果让我来完成每一次完整的注入,应该在知道原理的情况下,必然使用工具或者自己写代码实 ...