iOS - 协议实现的例子
程序员文章站
2022-07-07 23:27:22
在实际开发中,协议的应用非常广泛,以下是实际应用的例子。 1、协议的定义: myProtocolDelegate.h myProtocolDelegate.m 2、协议的调用和实现: ViewController.h ViewController.m ......
在实际开发中,协议的应用非常广泛,以下是实际应用的例子。
1、协议的定义:
myProtocolDelegate.h
// // myProtocolDelegate.h // zlwPlayerApplication // // Created by xjz on 2018/3/30. // Copyright © 2018年 xujinzhong. All rights reserved. // #import <Foundation/Foundation.h> // 协议定义 @protocol SampleProtocolDelegate <NSObject> @required - (void) processCompleted; @end @interface myProtocolDelegate : NSObject { // Delegate to respond back id <SampleProtocolDelegate> _delegate; } @property (nonatomic,strong) id delegate; -(void)startSampleProcess; // Instance method @end
myProtocolDelegate.m
// // myProtocolDelegate.m // zlwPlayerApplication // // Created by xjz on 2018/3/30. // Copyright © 2018年 xujinzhong. All rights reserved. // #import "myProtocolDelegate.h" @implementation myProtocolDelegate -(void)startSampleProcess{ if ([self.delegate respondsToSelector:@selector(processCompleted)]) { [self.delegate processCompleted]; } } @end
2、协议的调用和实现:
ViewController.h
// // ViewController.h // zlwPlayerApplication // // Created by xjz on 2018/1/31. // Copyright © 2018年 xujinzhong. All rights reserved. // #import <UIKit/UIKit.h> @interface ViewController : UIViewController @end
ViewController.m
// // ViewController.m // zlwPlayerApplication // // Created by xjz on 2018/1/31. // Copyright © 2018年 xujinzhong. All rights reserved. // #import "ViewController.h" #import "Masonry.h" #import "ReactiveObjC.h" #import "myProtocolDelegate.h" @interface ViewController ()<SampleProtocolDelegate> @property(nonatomic, strong) UIButton *btnDone; @property(nonatomic, strong) UILabel *lableMsg; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor whiteColor]; myProtocolDelegate *myDelegate = [[myProtocolDelegate alloc] init]; myDelegate.delegate = self; self.lableMsg.text = @"显示内容"; [[self.btnDone rac_signalForControlEvents:UIControlEventTouchDown] subscribeNext:^(__kindof UIControl * _Nullable x) { [myDelegate startSampleProcess]; }]; } -(UIButton *)btnDone{ if (!_btnDone) { _btnDone = [UIButton new]; _btnDone.backgroundColor = [UIColor grayColor]; _btnDone.layer.cornerRadius = 4.f; _btnDone.layer.masksToBounds = YES; [_btnDone setTitle:@"Done" forState:UIControlStateNormal]; [self.view addSubview:_btnDone]; [_btnDone mas_makeConstraints:^(MASConstraintMaker *make) { make.center.equalTo(self.view); make.width.offset(100); make.height.offset(80); }]; } return _btnDone; } -(UILabel *)lableMsg{ if (!_lableMsg) { _lableMsg = [UILabel new]; _lableMsg.font = [UIFont systemFontOfSize:26.f]; _lableMsg.textColor = [UIColor redColor]; _lableMsg.textAlignment = NSTextAlignmentCenter; [self.view addSubview:_lableMsg]; [_lableMsg mas_makeConstraints:^(MASConstraintMaker *make) { make.bottom.equalTo(self.btnDone.mas_top).offset(-20); make.centerX.equalTo(self.view); make.width.equalTo(self.view); make.height.offset(80); }]; } return _lableMsg; } #pragma mark - Sample protocol delegate -(void)processCompleted{ static NSInteger idx = 1; self.lableMsg.text = [NSString stringWithFormat:@"代理-%zi", idx++]; } @end