swift:入门知识之协议与扩展
swift中使用protocol声明一个协议接口
swift中类、枚举和结构体都可以实现协议接口
swift中类中的方法都可以修改成员变量的值
swift中结构体中的方法默认是不能修改成员变量的,添加mutating关键字后就可以修改了
swift中使用extension来为现有的类型添加功能。你可以使用扩展来给任意类型添加协议,甚至是你从外部库或者框架中导入的类型
swift中协议接口的委托代理模式和Objective-C基本上是一样的,都是主方设置一个代理人,然后将事情的处理委托给这个代理人去办,而主方自己只需要声明协议的规则即可。记住,代理人必须按照主方设定的规则去处理这些需要做的事情。不管代理人是谁,只要遵从协议就可以成为主方的委托者。

具体举例如下:
//声明一个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:入门知识之协议与扩展的更多相关文章
- Httpd服务入门知识-http协议版本,工作机制及http服务器应用扫盲篇
Httpd服务入门知识-http协议版本,工作机制及http服务器应用扫盲篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Internet与中国 Internet最早来源于美 ...
- Java web 入门知识 及HTTP协议详解
Java web 入门知识 及HTTP协议详解 WEB入门 WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. Internet上供外界访问的Web资 ...
- Swift - 2 (?和!、结构体、类、协议、扩展、闭包)
1> 可选类型(?)和强制解包(!) 在swift中,可选类型(?) 其根源是一个 枚举型,里面有 None 和 Some 两种类型.其实所谓的 nil 就是 Optional.None , 非 ...
- 豆知识( DNS; HTTP入门;网络协议)
DNS入门知识 DNS服务器 通过DNS服务器,才能知道某个域名的IP地址到底是什么. Linux系统里面,DNS服务器的IP地址保存在/etc/resolv.conf文件 使用工具软件dig可以查询 ...
- zabbix入门知识
zabbix入门知识 zabbix中文手册 https://www.zabbix.com/documentation/3.4/manual/ 1.zabbix介绍 Zabbix 是一个企业级的分布式开 ...
- Web安全之Web 安全介绍与基础入门知识
web安全介绍与基础入门知识 安全与安全圈 甲方与乙方 甲方:如腾讯,阿里等需要安全服务的公司 乙方:提供安全服务产品的服务型安全公司 web与二进制 web,研究web安全 二进制,研究如客户端安全 ...
- swift学习笔记之-协议
//协议(Protocols) import UIKit /*协议(Protocols) 1.协议定义了一个蓝图,规定了用来实现某一特定任务或者功能的方法.属性,以及其他需要的东西 2.类.结构体或枚 ...
- Swift入门篇-闭包和函数
今天主要是给大家分享的是 swift中闭包的用法,我个人觉得闭包就是函数的简写方法,如果您函数不是很熟悉请查阅 swift入门篇-函数 1:函数类型 函数类型 var 变量 :(类型)->返回值 ...
- Swift入门篇-循环语句
今天早上一起来所有新闻都是报道荷兰5-1战胜西班牙,我一看没有搞错吧,顿时想都如果中国队vs荷兰队也不至于会输的怎么惨吧,难道是荷兰队开挂了,于是我看了一下昨天比赛的视频直播,还真是新闻报道的那样,顿 ...
随机推荐
- 闹钟类app构想
NABC--闹钟app N:我们打算针对那些易健忘的人来制作一款闹钟功能的记事本,具来说服务的对象有很多:有健忘的人,还有情侣,北漂的人及其父母(...),常年见不到亲人(双方),后期我们若提前完成基 ...
- 查看Android应用签名信息
本文档介绍在Android下如何查看自己的应用签名及三方APK或系统APK签名信息,包含其中的MD5.SHA1.SHA256值和签名算法等信息. 1.查看自己的应用签名 可以通过两种方式查看 (1) ...
- 在Eclipse新建菜单中添加JSP
在开发的时候,大家可能选择不同的透视图,下面以Java EE透视图为例. 在项目上右键,选择new命令,出来的菜单中并没有新建JSP的选项. 这样一来,如果想新建JSP,只能选择Other命令,在里面 ...
- 二分--LIGHTOJ 1088查找区间(水题)
#include <iostream> #include <cstdio> #include <cmath> using namespace std; const ...
- 【BZOJ】【4011】【HNOI2015】落忆枫音
拓扑排序+DP 题解:http://blog.csdn.net/PoPoQQQ/article/details/45194103 http://www.cnblogs.com/mmlz/p/44487 ...
- spring AspectJ的Execution表达式说明
Aspectj切入点语法定义 在使用spring框架配置AOP的时候,不管是通过XML配置文件还是注解的方式都需要定义pointcut"切入点" 例如定义切入点表达式 execut ...
- NYOJ-214 单调递增子序列(二) TLE 分类: NYOJ 2014-01-28 22:57 171人阅读 评论(0) 收藏
#include<stdio.h> #include<stdlib.h> #define max(x,y) x>y?x:y #define MAXX 100005 int ...
- matrix_last_acm_3
the first CCPC password 123 A http://acm.hust.edu.cn/vjudge/contest/view.action?cid=97380#problem/ ...
- [原]TCP/UDP使用细节备忘
body { font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI ...
- ie 与 Chrome 时间格式化问题.
ie 与 Chrome 时间格式化通用: new Date(res[i].Time.replaceAll("-", "/")).format("yyy ...