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)
        }
    }
}
时间: 2024-08-07 09:17:41

Swift中的协议的相关文章

Swift中声明协议中的class关键字的作用

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 最近在Cocos2D编程for Swift中看到以下一个代码片段: protocol GameMode:class{ var userInterface:CCNode! {get} func gameplay(mainScene:MainScene,droppedFallingObject:FallingObject) func gameplay(mainSc

Swift中面向协议的编程

什么是面向协议的编程? 面向协议的编程,是一种编程范式. 编程范式,是一个计算机科学用语.维基百科中的解释是,计算机编程的基本风格或典型模式.通俗来说,就是解决某一个问题的方法不同方法和思路. 像大家很熟悉的,面向对象编程以及面向过程编程,都是一种编程范式. 面向过程编程,关心的焦点是解决某一个问题需要多少步.而面向对象的编程关心的是解决问题需要多少个对象,以及这些对象之间的组织联系. 解释完了编程范式这个名字含义之后,我们继续回到正题上来. 既然面向协议编程,与面向对象,面向过程一样,是一种编

Swift中的结构体,类,协议,扩展和闭包的用法以及? 和 !的区别

// MARK: - 1.结构体 //1.声明一个结构体 struct Rect {    // 声明结构体变量的属性(存储属性)    var x:Float    var y:Float    var width:Float    var height:Float    // 声明结构体属性,要使用static    static var description:String?        // 声明一个计算属性(是用来专门计算结构体变量属性的setter,和getter方法,其本身没有存

Swift中协议的简单介绍

熟悉objective-c语言的同学们肯定对协议都不陌生,在Swift中苹果将 protocol 这种语法发扬的更加深入和彻底.Swift语言中的 protocol 不仅能定义方法还能定义属性,配合 extension 扩展的使用还能提供一些方法的默认实现,而且不仅类可以遵循协议,现在的枚举和结构体也能遵循协议了.基于此本文从 1,协议中定义属性和方法 , 2,协议的继承.聚合.关联类型 , 3,协议的扩展 , 4,Swift标准库中常见的协议 , 5,为什么要使用协议 5个方面结合自身的学习经

【iOS】Swift中扩展extension与协议protocol

一起连带前面几篇Playground小结代码都转到github上了,注释写了很多,主要方便自己以后可以翻翻看.Swift语法主要部分差不多就这些了.当然还有泛型.运算符重载.ARC.闭包之类的补充. 一.扩展(extension) 扩展 extension(类似OC中的分类,但Swift中没有名字), 即使在没有权限获取到原始代码的情况下,为类增加新功能. 注意: 只要定义了扩展, 那么该扩展对该类的实例都是可用的. extension SomeType{ //添加到SomeType的新功能写在

记OC迁移至swift中笔记20tips

写久了OC后来写swift,总感觉写着是swift的皮毛,但是实际上是OC的核心,这里整理了OC迁移至swift中的一些小细节. 1 在当前类中,实例方法调用属性以及方法都可以将self省略掉,而且是建议省略 2 selector是调用方法写法是:Selector("sayHello")或者是#selector(sayHello) 3 swift中不同类型的值之间不能直接做运算,所以不同类型值做运算的时候需要对值进行类型转化,都转化至同一类型之后方可做运算 4 可选类型如果一个变量可能

Swift标准库中的协议_012_swift协议

//: Playground - noun: a place where people can play import UIKit //--Swift标准库中的协议---// //1.实例的比较:判断两个实例值是否相同 let a = 4, b = 4 a == b //(Int类型的比较) //自定义结构体类型,进行是否相等的比较 struct Games { var winCount : Int var loseCount : Int } let g1 = Games(winCount: 2

Swift中的错误处理

前言 任何代码都会发生错误,这些错误有些是可以补救的,有些则只能让程序崩溃.良好的错误处理能够让你的代码健壮性提高,提高程序的稳定性. 本文的Swift版本:Swift 3 Objective C 返回nil 如果出错了,就返回空是Objective C中的一种常见的处理方式.因为在Objective C中,向nil发送消息是安全的.比如: - (instancetype)init { self = [super init]; if (self) { } //如果初始化失败,会返回nil ret

Swift Explore - 关于 Swift 中的 isEqual 的一点探索

在我们进行 App 开发的时候,经常会用到的一个操作就是判断两个对象是否相等.比如两个字符串是否相等.而所谓的 相等 有着两层含义.一个是值相等,还有一个是引用相等.如果熟悉 Objective-C 开发的话,就会知道 Objective-C 为我们提供了一系列 isEqual: 方法来判断值相等,而 == 等于号用来判断引用相等. 我们来看一个 Objective-C 的例子就会更加明白了: NSArray *arr1 = @[@"cat",@"hat",@&qu