iOS - 协议实现的例子
在实际开发中,协议的应用非常广泛,以下是实际应用的例子。
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 = .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();
make.height.offset();
}];
}
return _btnDone;
} -(UILabel *)lableMsg{
if (!_lableMsg) {
_lableMsg = [UILabel new];
_lableMsg.font = [UIFont systemFontOfSize:.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(-);
make.centerX.equalTo(self.view);
make.width.equalTo(self.view);
make.height.offset();
}];
}
return _lableMsg;
} #pragma mark - Sample protocol delegate
-(void)processCompleted{
static NSInteger idx = ;
self.lableMsg.text = [NSString stringWithFormat:@"代理-%zi", idx++];
} @end
iOS - 协议实现的例子的更多相关文章
- JAVA基础知识之网络编程——-基于UDP协议的通信例子
UDP是一种不可靠的协议,它在通信两端各建立一个socket,这两个socket不会建立持久的通信连接,只会单方面向对方发送数据,不检查发送结果. java中基于UDP协议的通信使用DatagramS ...
- iOS协议
ios中的协议:大家猛一看 感觉挺高深的 其实ios中的协议就是c#,java中的接口 只是变了一个形式: 自我感觉ios中的协议没有c#中的接口好 人家的接口就是固定你的程序内容的 而ios中 ...
- ios 协议分析
1 基本用途 可以用来声明一大堆方法(不能声明成员变量) 只要某个类遵守了这个协议,就相当于拥有了这个协议中的所有方法声明 只要父类遵守了某个协议,就相当于子类也遵守了 2 格式 协议的编写 @pro ...
- iOS 7新功能例子
参考https://github.com/shu223/iOS7-Sampler Code examples for the new functions of iOS 7. Contents Dyna ...
- iOS 协议
协议分为三部分:声明.引用.实现. 通常,声明协议和声明协议类型的属性都是在同一个类中.声明协议和声明协议作为属性在头文件中,引用在声明类的实现文件中.而实现协议则在其它类中.
- ios协议和委托
在iPhone开发协议和委托是常接触到的东西,到底什么是协议什么是委托,他们什么关系? 一 协议 (1)协议相当于没有与类相关联的接口,他申明一组方法,列出他的参数和返回值,共享给其他类使用,然后不进 ...
- iOS 协议分发
Github:AOMultiproxier.HJProtocolDispatcher 协议实现分发器,能够轻易实现将协议事件分发给多个实现者. 一.AOMultiproxier.h #define A ...
- ios协议调起app
function openIos(url, callback) { if (!url) { return; } var node = document.createElement('iframe'); ...
- iOS delegate, 代理/委托与协议.
之前知知道iOS协议怎么写, 以为真的跟特么java接口一样, 后来发现完全不是. 首先, 说说应用场景, 就是当你要用一个程序类, 或者说逻辑类, 去控制一个storyboard里面的label, ...
随机推荐
- 6、perl创建模块(Exporter)及路径 引用 嵌套 查询模块
参考博客:http://www.cnblogs.com/xudongliang/tag/perl/ 1.perl 模块的创建以及制定perl 模块的路径 (1)创建一个Myfun.pm模块. #/us ...
- StringBuffer输出
public class Test { public static void main(String[] args) { StringBuffer a = new StringBuffer(" ...
- 打开*.gd文件的方法
问题来了: 你可能会收到*.gd的公文,那么一般的阅读器都打不开…… 解决方法: 使用书生阅读器(三合一版)来打开 地址:http://www.du8.com/download/index.html
- MySQL中ORDER BY与LIMIT一起使用(有坑)
1. 现象与问题 ORDER BY排序后,用LIMIT取前几条,发现返回的结果集的顺序与预期的不一样 下面是我遇到的问题: 可以看到,带LIMIT与不带LIMIT的结果与我预期的不一样,而且“很不可 ...
- 动态规划---等和的分隔子集(计蒜课)、从一个小白的角度剖析DP问题
自己还是太菜了,算法还是很难...这么简单的题目竟然花费了我很多时间...在这里我用一个小白的角度剖析一下这道题目. 晓萌希望将1到N的连续整数组成的集合划分成两个子集合,且保证每个集合的数字和是相等 ...
- Yaf + Smarty 整合笔记
Yaf真的是太简单了,简单到使用mvc的时候在view里面需要手写php脚本.因此考虑整合一下smarty模板引擎.随心所欲也正是yaf的魅力 Yaf 安装 这里简单说一下yaf的安装,已经是非常无脑 ...
- 关于写PPT
如果你要给别人讲东西,要记得你的受众的不同,你的讲法也应该有不同,侧重点应该有所区别. 如果作为一个老师,你的PPT应该是让人看懂,把人讲懂,这是你的最终目的所在.如果你是一个毕业生,你要围绕你要解决 ...
- Fiddler 基础教程详解
Fiddler是最强大最好用的Web调试工具之一,它能记录所有客户端和服务器的http和https请求,允许你监视,设置断点,甚至修改输入输出数据. 使用Fiddler无论对开发还是测试来说,都有很大 ...
- MCP|LQD|Data-independent acquisition improves quantitative cross-linking mass spectrometry (DIA方法可提升交联质谱定量分析)
文献名:Data-independent acquisition improves quantitative cross-linking mass spectrometry (DIA方法可提升定量交联 ...
- P3369 【模板】普通平衡树
纯板子.... 题意: 插入 xx 数 删除 xx 数(若有多个相同的数,因只删除一个) 查询 xx 数的排名(排名定义为比当前数小的数的个数 +1+1 .若有多个相同的数,因输出最小的排名) 查询排 ...