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, ...
随机推荐
- BMFont使用图片自定义字体(无需字体文件)
网上搜BMFont做字体,很多都是从一个字体文件读取,然后选择需要的字,然后保存成图片文字,这个对于一般的文字的确很实用,因为Unity本身不支持中文,所以只好这样了. 但是做过游戏的都知道,策划总是 ...
- 获取app下载链接
https://itunes.apple.com/cn/app/id1398635899?mt=8 只需要更改其中的id就可以了
- 2018杭电多校第六场1009(DFS,思维)
#include<bits/stdc++.h>using namespace std;int a[100010];char s[20];int zhiren[100010];vector& ...
- ERROR 1010 (HY000): Error dropping database (can't rmdir './nsd', errno: 39)
在删除数据库的时候报标题所示错误 mysql> drop database test; ERROR 1010 (HY000): Error dropping database (can't rm ...
- 799C(xjb)
题目链接: http://codeforces.com/problemset/problem/799/C 题意: 有c, d两种货币, 有 n 个货物, 可以用 c 货币或者 d 货币购买, 现在需要 ...
- game with probability problem
两个人 A, B 取 n 枚石子,祂们轮流抛硬币 (A 先手),每次抛硬币,如果是正面,就取出一枚石子,否则什么都不做,然而 A, B 有一种超能力,在抛硬币前在意志中确定一面 (正面或反面),然后就 ...
- linux网络配置详解
一:相关网络配置的文件 1.网卡名配置相关文件 网卡名命名规则文件: /etc/udev/rules.d/70-persistent-net.rules # PCI device 0x8086:0x1 ...
- LightOJ 1336 - Sigma Function
原题链接 基础数论中很经典的一道题 题意 给出了σ(n)的计算公式,让你找出整数1-n中有多少对应σ(n)的值是偶数. 思路 观察σ(n)的公式发现,每一个乘项都是 (piei+1 - 1) / (p ...
- Swing实现canvas-nest.js 源码
#### 说明 canvas-nest.js 源码 http://www.bubuko.com/infodetail-2237716.html 地址:https://gitee.com/dgwcode ...
- mysql事务锁表
-- 查看被锁住的SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS; -- 等待锁定SELECT * FROM INFORMATION_SCHEMA.INNO ...