协议:
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)
}
}
}