博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Swift中的协议
阅读量:6151 次
发布时间:2019-06-21

本文共 2114 字,大约阅读时间需要 7 分钟。

协议:

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

getset部分: 只需写get, set即可, 无需提供实现, set可有可无

 

下面是代码部分:

ViewController.swift

import UIKitclass 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 UIKitprotocol 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)        }    }}

转载地址:http://uggya.baihongyu.com/

你可能感兴趣的文章
[TC13761]Mutalisk
查看>>
while()
查看>>
常用限制input的方法
查看>>
IIS7下使用urlrewriter.dll配置
查看>>
并行程序设计学习心得1——并行计算机存储
查看>>
bulk
查看>>
js document.activeElement 获得焦点的元素
查看>>
C++ 迭代器运算
查看>>
【支持iOS11】UITableView左滑删除自定义 - 实现多选项并使用自定义图片
查看>>
JavaWeb学习笔记(十四)--JSP语法
查看>>
【算法笔记】多线程斐波那契数列
查看>>
java8函数式编程实例
查看>>
jqgrid滚动条宽度/列显示不全问题
查看>>
在mac OS10.10下安装 cocoapods遇到的一些问题
查看>>
angularjs表达式中的HTML内容,如何不转义,直接表现为html元素
查看>>
css技巧
查看>>
Tyvj 1728 普通平衡树
查看>>
javascript性能优化
查看>>
多路归并排序之败者树
查看>>
java连接MySql数据库
查看>>