Swift中的协议
协议:
1.Swift协议用于定义多个类型应该遵守的规范
2.协议定义了一种规范, 不提供任何实现
3.协议统一了属性名, 方法, 下标, 但是协议并不提供任何实现
4.语法格式:
[修饰符] protocol 协议名: 父协议1, 父协议2, ... { // 协议内容 }
修饰符:可以省略, 也可以是private, internal, public之一
协议名应与类名采用相同的命名规则
一个协议可以有多个直接父协议, 但协议只能继承协议, 不能继承类
协议的内容: 指定协议实现者必须提供的那些功能, 比如属性, 方法, 构造器和下标等
实现协议的语法:
1.Struct 结构体名: 第一个协议, 第二个协议, ... { // 实现协议要求 }
2.Class 类名: SuperClass, 第一个协议, 第二个协议, ... { // 协议的要求 }
协议指定属性要求
1.协议中定义属性要求的语法格式:
class var 属性名:类型{ get set }
说明: class可有可无, 如果有class关键字, 说明为类型属性, 否则为实例属性
不可以用static代替class
get和set部分: 只需写get, set即可, 无需提供实现, set可有可无
下面是代码部分:
ViewController.swift
import UIKit
class ViewController: UIViewController, ButtonViewDelegate {
// 协议规定的属性
var testValueOne: String = "testValueOne"
var testValueTwo: String = "testValueTwo"
var buttonView: ButtonView!
override func viewDidLoad()
{
super.viewDidLoad()
self.buttonView = ButtonView.buttonView()
self.buttonView.frame = CGRectMake(0, 0, 200, 200)
self.buttonView.center = self.view.center
self.buttonView.delegate = self
self.view.addSubview(self.buttonView)
}
// MARK - ButtonViewDelegate
func buttonView(buttonView: ButtonView, didClickButton button: UIButton)
{
print("点击了ButtonView里面的按钮")
}
}
ButtonView.swift(这个类是通过xib创建的)
import UIKit protocol testDelegateOne
{
// 定义协议属性
var testValueOne: String { get set }
} protocol testDelegateTwo
{
// 定义协议属性
var testValueTwo: String { get set }
} // 协议可以实现多继承
protocol ButtonViewDelegate: testDelegateOne, testDelegateTwo
{
// 协议中定义方法
func buttonView(buttonView: ButtonView, didClickButton button: UIButton)
} class ButtonView: UIView
{
// 定义代理对象
var delegate: ButtonViewDelegate? // 快捷创建对象方法
class func buttonView() -> ButtonView
{
let buttonView: ButtonView = NSBundle.mainBundle().loadNibNamed("ButtonView", owner: nil, options: nil).first as! ButtonView
return buttonView
} @IBAction func buttonClick(sender: UIButton)
{
if let delegate = self.delegate {
delegate.buttonView(self, didClickButton: sender)
}
}
}
Swift中的协议的更多相关文章
- Swift 中的协议
Swift 中的协议协议是为方法.属性等定义一套规范,没有具体的实现,类似于Java中的抽象接口,它只是描述了方法或属性的骨架,而不是实现.方法和属性实现还需要通过定义类,函数和枚举完成. 协议定义 ...
- Swift中声明协议中的class关键字的作用
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 最近在Cocos2D编程for Swift中看到以下一个代码片 ...
- Swift中面向协议的编程
什么是面向协议的编程? 面向协议的编程,是一种编程范式. 编程范式,是一个计算机科学用语.维基百科中的解释是,计算机编程的基本风格或典型模式.通俗来说,就是解决某一个问题的方法不同方法和思路. 像大家 ...
- 记OC迁移至swift中笔记20tips
写久了OC后来写swift,总感觉写着是swift的皮毛,但是实际上是OC的核心,这里整理了OC迁移至swift中的一些小细节. 1 在当前类中,实例方法调用属性以及方法都可以将self省略掉,而且是 ...
- 思考 Swift 中的 MirrorType 协议
Swift中的反射非常有限,仅允许以只读方式访问元数据的类型子集.或许 Swift 因有严格的类型检验而不需要反射.编译时已知各种类型,便不再需要进行进一步检查或区分.然后大量的 Cocoa API ...
- Swift和Objective-C中的协议(protocol)有什么异同
Swift和Objective-C中的protocol的相同点在于:两者可以被用作代理.Objective-C中的protocol类似于Java中的Interface,在实际开发中主要用与适配器模式( ...
- 阿里巴巴最新开源项目 - [HandyJSON] 在Swift中优雅地处理JSON
项目名称:HandyJSON 项目地址:https://github.com/alibaba/handyjson 背景 JSON是移动端开发常用的应用层数据交换协议.最常见的场景便是,客户端向服务端发 ...
- 窥探Swift之使用Web浏览器编译Swift代码以及Swift中的泛型
有的小伙伴会问:博主,没有Mac怎么学Swift语言呢,我想学Swift,但前提得买个Mac.非也,非也.如果你想了解或者初步学习Swift语言的话,你可以登录这个网站:http://swiftstu ...
- Swift基础--通知,代理和block的使用抉择以及Swift中的代理
什么时候用通知,什么时候用代理,什么时候用block 通知 : 两者关系层次太深,八竿子打不着的那种最适合用通知.因为层级结构深了,用代理要一层一层往下传递,代码结构就复杂了 代理 : 父子关系,监听 ...
随机推荐
- C#数字图像处理的3种方法
本文主要通过彩色图象灰度化来介绍C#处理数字图像的3种方法,Bitmap类.BitmapData类和Graphics类是C#处理图像的的3个重要的类. Bitmap只要用于处理由像素数据定义的图像的对 ...
- 成绩转换 AC 杭电
成绩转换 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- MacOS上的包管理工具
众所周知,Linux世界中存在着如apt-get.yum等强大而简单的包管理工具,而在Macos中同样存在类似的东西. 当前比较流行的主要有如下两种: 1.Homebrew(推荐):其官网地址brew ...
- Android 读取和保存文件(手机内置存储器)
1:activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/androi ...
- 17 个 Linux 下用于 C/C++ 的最好的 IDE
C++,一个众所周知的 C 语言的扩展,是一个优秀的.强大的.通用编程语言,它能够提供现代化的.通用的编程功能,可以用于开发包括视频游戏.搜索引擎.其他计算机软件乃至操作系统等在内的各种大型应用. C ...
- Windows内存小结(有好多图,比较清楚)
以前写过一篇理解程序内存, 当时主要是针对用户态,下面再稍微深入一点: 我们以32位程序为例(不启用AWE), 总共4G虚拟空间,其中低2G属于用户态, 高2G属于操作系统内核, 每个程序都有自己的低 ...
- 用VBA读取Excel表格输出到格式化的xml文件中
最近需要做一个一劳永逸的XML文档生成,给项目内部专用的,直接VBA方便了,才第一次用.现学现卖了....抽时间还是系统的学习下这方面的知识吧 输出到UTF-8编码的XML文档.并且换行符是Unix的 ...
- Linux系统编程(31)—— socket编程之TCP详解
TCP有源端口号和目的端口号,通讯的双方由IP地址和端口号标识.32位序号.32位确认序号.窗口大小稍后详细解释.4位首部长度和IP协议头类似,表示TCP协议头的长度,以4字节为单位,因此TCP协议头 ...
- 【转】Android 带checkbox的listView 实现多选,全选,反选----解决checkbox错位问题
原文网址:http://blog.csdn.net/onlyonecoder/article/details/8687811 Demo地址(0分资源):http://download.csdn.net ...
- 2014-08-05 再次接触VBA
今天是在吾索实习的第20天.本来今天的计划是完成BBS的界面的设计的,但是中途发生了一些小插曲,经理要求我帮忙用VBA实现EXCEL中表与表之间的动态联编,而且答应了客户明天就要看到成品了.所以只好放 ...