这里记录一下swift协议的最简单用法,使用方法如下:
一、在子控件里定义协议
//定义协议,协议名称最好是“你的类名”+Delegate
protocol WalletButtonCellDelegate {
//协议方法,可以带参数
func topUpClick()
}
二、在子控件里定义一个delegate属性
class WalletButtonCell: UITableViewCell {
//定义一个delegate属性
open var delegate: WalletButtonCellDelegate?
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
//初始化子视图代码
//.........
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
三、在需要回调的地方实现一下协议方法
//MARK: - Action
extension WalletButtonCell {
@objc private func topUpButtonClick() {
//重要!这里要判断一下self.delegate是否为nil,防止外界未设置导致闪退
if self.delegate != nil {
self.delegate!.topUpClick()
}
}
}
四、在控制器里的cellForRowAt方法里设置cell.delegate = self
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
switch indexPath.section {
case 0:
let cell: WalletButtonCell = tableView.dequeueReusableCell(for: indexPath)
cell.delegate = self
return cell
default:
let cell: WalletAssetCell = tableView.dequeueReusableCell(for: indexPath)
return cell
}
}
五、在控制器里监听协议WalletButtonCellDelegate的回调方法
//MARK: - Action
extension WalletViewController: WalletButtonCellDelegate {
func topUpClick() {
navigationController?.pushViewController(TopUpController(), animated: true)
}
}
网友评论