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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | 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创建的)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | 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 ) } } } |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Linux系统下SQL Server数据库镜像配置全流程详解
· 现代计算机视觉入门之:什么是视频
· Sdcb Chats 技术博客:数据库 ID 选型的曲折之路 - 从 Guid 到自增 ID,再到
· .NET Core GC压缩(compact_phase)底层原理浅谈
· Winform-耗时操作导致界面渲染滞后
· Phi小模型开发教程:C#使用本地模型Phi视觉模型分析图像,实现图片分类、搜索等功能
· 语音处理 开源项目 EchoSharp