iOS开发(Swift)——协议

iOS开发交流群:301058503

一般的定义:

protocol 协议名称 {
//方法
}

protocol TopViewDelegate {
    func action()
}

特殊使用:

一、实例化协议时使用弱引用修饰

weak var topViewDelegate: TopViewDelegate!

此时,就会报错

有两种解决方法:
1、在定义协议时加上@objc

@objc protocol TopViewDelegate {
    func action()
}

2、把协议定义成class

protocol TopViewDelegate: class {
    func action()
}

二、协议方法可选实现

1、在定义协议时加上@objc,并且把定义可选的方法

@objc protocol TopViewDelegate {
    @objc optional func action()
}

2、使用extension实现协议方法(可以为空)

protocol TopViewDelegate {
    func action()
}

extension TopViewDelegate {
    func action() {
    }
}

三、结构体,枚举引用协议

使用mutating关键字修饰方法

protocol TopViewDelegate {
    mutating func action()
}

struct TopViewStruct: TopViewDelegate {
    mutating func action() {
    }
}

注意,此时的协议不能被定义成class类型了

protocol TopViewDelegate: class {
    func action()  //这里不能使用mutating修饰
}

四、协议里面可以添加属性

protocol TopViewDelegate {
    var age: String { get }    //要求该属性可读
    var name: String { get set }   //要求该属性可读可写
}

注意:协议里面的属性要用var定义

使用

定义实例

class TopView: UIView {
weak var topViewDelegate: TopViewDelegate!
}

在按钮事件里面

if topViewDelegate != nil {
    topViewDelegate.action!()
}

创建一个AViewContoller

class AViewContoller: UIViewController ,TopViewDelegate{//引入代理


}

创建TopView实例并设置代理

let top = TopView()
self.addSubview(top)
top.topViewDelegate = self
//MARK:-------TopViewDelegate
    func action() {
        
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值