zoukankan      html  css  js  c++  java
  • 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

    getset部分: 只需写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)
            }
        }
    }
  • 相关阅读:
    forever守护nodejs
    sql server自动备份
    mongodb数据库自动备份 windows
    mongodb中的objectId和字符串id之间的转换
    mongodb中内嵌数组的增删改查
    nodejs momentjs操作时间(24小时制)
    nodejs 获取某一时间的前一天 后一天
    FastDFS 文件上传成功,访问404
    Ubuntu16.04系统下FastDFS+Nginx安装配置
    ubuntu16.04安装python3.7
  • 原文地址:https://www.cnblogs.com/Rinpe/p/5190626.html
Copyright © 2011-2022 走看看