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荷兰队也不至于会输的怎么惨吧,难道是荷兰队开挂了,于是我看了一下昨天比赛的视频直播,还真是新闻报道的那样,顿 ...
随机推荐
- Week8 软件规格说明书
1.概述 本项目组所开发的软件为一个基于Android的手机端的时间管理软件,主要功能为时间管理软件,可以用于管理待办事项,记录一些需要提醒的信息等.有事件提醒.与Google账户同步.课程表等功能. ...
- hasOwnProperty与isPrototypeOf
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 断点续传 (HTTP) 归纳
由于最近项目中要上传较大的文件,基于公司原有的底层框架的局限性,对于大文件的传输都束手无策,基于文件传输的安全性,考虑用断点续传(HTTP)以及FTP上传两种方式实现下面归纳下HTTP续传和FTP上传 ...
- 【Longest Palindromic Substring】cpp
题目: Given a string S, find the longest palindromic substring in S. You may assume that the maximum l ...
- Netsharp快速入门(之18) 平台常用功能(工作区相关)
作者:秋时 转载须说明出处 第6章 平台功能 6.1 部件二次开发设置 6.1.1 工具栏管理 1.从单据二次开发-工具栏管理进入 2.主要设置显示,对应的方法名或设置权限相关操作 ...
- Mysql数据库表排序规则不一致导致联表查询,索引不起作用问题
Mysql数据库表排序规则不一致导致联表查询,索引不起作用问题 表更描述: 将mysql数据库中的worktask表添加ishaspic字段. 具体操作:(1)数据库worktask表新添是否有图片字 ...
- Android 动态Tab分页效果实现
当前项目使用的是TabHost+Activity进行分页,目前要做个报表功能,需要在一个Tab页内进行Activity的切换.比方说我有4个Tab页分别为Tab1,Tab2,Tab3,Tab4,现在的 ...
- vmware workstation 10.0
2013.9.3 vmware workstation 10.0 build 1295980新增功能– 可以将windows 8.1物理pc转变为虚拟机:unity模式增强,与windows 8.1 ...
- jQuery的弹出窗口插件colorbox
官方网站:http://colorpowered.com/colorbox/ 支持 照片,照片组,幻灯片,ajax,内联 和 iframe 框架. 通过CSS 控制外观,使用用户可以很容易重新定制外观 ...
- 3-Highcharts 3D图之3D柱状图分组叠堆3D图
<!DOCTYPE> <html lang='en'> <head> <title>3-Highcharts 3D图之3D柱状图分组叠堆3D图</ ...