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荷兰队也不至于会输的怎么惨吧,难道是荷兰队开挂了,于是我看了一下昨天比赛的视频直播,还真是新闻报道的那样,顿 ...
随机推荐
- 如何在Oracle网站获取官方免费课程
1.登陆Oracle Support,输入Article ID:740966.1,点击进行查找: 2.找到下图所示的文章,Article ID为:740964.1 3.点击第二个图中所示的Here处, ...
- 【转】oracle number与java中long、int的对应
Oracle数据库中number类型在hibernate的引用 1)如果不指定number的长度,或指定长度n>18 id number not null,转换为pojo类时,为java.mat ...
- 19、android面试题整理(自己给自己充充电吧)
(转载,出处丢失,请原作者原谅,如有意见,私信我我会尽快删除本文) JAVA 1.GC是什么? 为什么要有GC?GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问 ...
- Python 读写excel数据
读取excel 文件的数据 import csv with open('D:/mystuff/11.csv','r') as f: reader = csv.reader(f) for row in ...
- Sprite Kit 入门教程
Sprite Kit 入门教程 Ray Wenderlich on September 30, 2013 Tweet 这篇文章还可以在这里找到 英语, 日语 If you're new here, ...
- 一个perfect 的解决 阴影拉伸的方法 shadow map strech
因为在场景中做了,有的物体产生阴影比如人物,有的物体不产生阴影比如地面,这样在地面凹下去的地方,悬崖,池塘边,就会有阴影的拉伸. 实际上, 没办法上传图片.... L是光源 A 点(人物身上)产生阴影 ...
- A trip through the graphics pipeline 2011 Part 10(翻译)
之前的几篇翻译都烂尾了,这篇希望....能好些,恩,还有往昔呢. ------------------------------------------------------------- primi ...
- shader 汇编
mad ro.xy v1.xyxx, l(1.000000,-1.000000,0.0000,0.000000), l(0.000000,1.000000,0.0000,0.000000) 这个东西真 ...
- PHP-Java-Bridge使用笔记,2014年9月最新版
这是我在做平安银行开发的时候,本地使用PHP环境,平安银行接口为Java接口的时候,采用PHP-Java-Bridge的方式调用接口的笔记.因为现在网上的教程基本上都不行了,所以在这里贴出我能使用的而 ...
- iOS block示例
// // block.h // Block // // Created by tqh on 15/4/12. // Copyright (c) 2015年 tqh. All rights reser ...