Objective-C:在类中设置不同协议
在下面的代码中,设置了两种不同的协议规则:一种是老师对学生设置的协议:即老师发出命令后,学生站起来、回答问题、坐下; 另一种是我对学生设置的协议:即学生按照我的协议中的初始化函数去初始化一个整数。
//我设置的协议Myprotocol,里面有我设置的协议规则(属性、函数)作为一个单独的文件
// Myprotocol.h
// 协议
//
// Created by ma c on 15/8/12.
// Copyright (c) 2015年. All rights reserved.
// #import <Foundation/Foundation.h> @protocol Myprotocol
@property(nonatomic,assign)NSInteger integer;
-(id)initWithInteger:(NSInteger) i;
-(void) show2;
-(void)print;
-(void) initialize;
@end
//老师设置的协议和类本身的属性 .h和.m文件;在类里面直接设置协议,没有作为单独的文件
// Teacher.h
// 协议
//
// Created by ma c on 15/8/12.
// Copyright (c) 2015年. All rights reserved.
// #import <Foundation/Foundation.h>
@protocol TeacherDelegate//老师制定协议规则
@required //在协议代理人类中必须要全部实现的方法
-(void) show1;
-(void) Standup;
-(void) Answerquestion;
@optional //协议代理人类中可以选择性的实现(可以实现,也可以不用实现)
-(void) Setdown;
@end @interface Teacher : NSObject
@property(nonatomic,weak) id<TeacherDelegate> delegate;
-(void)ordering;
@end
// Teacher.m
// 协议
//
// Created by ma c on 15/8/12.
// Copyright (c) 2015年. All rights reserved.
// #import "Teacher.h" @implementation Teacher
@synthesize delegate;
-(void)ordering
{
[delegate show1];
NSLog(@"teacher is ordering!");
[self.delegate Standup];
[self.delegate Answerquestion];
[self.delegate Setdown];
}
@end
//学生类Student 它作为实现这两种协议的代理人(委托者).h和.m文件
// Student.h
// 协议
//
// Created by ma c on 15/8/12.
// Copyright (c) 2015年. All rights reserved.
// #import "Teacher.h"
#import "TeacherDelegate.h"
#import "Myprotocol.h"
@interface Student : Teacher<TeacherDelegate,Myprotocol>
@end
// Student.m
// 协议
//
// Created by ma c on 15/8/12.
// Copyright (c) 2015年. All rights reserved.
// #import "Student.h" @implementation Student
@synthesize integer;
//TeacherDelegate
-(void) show1
{
NSLog(@"the teacher's protocol is running!");
}
-(void) Standup
{
NSLog(@"student stand up.");
}
-(void) Answerquestion
{
NSLog(@"student answer question.");
}
-(void) Setdown
{
NSLog(@"student set down!");
}
//Myprotocol
-(void) show2
{
NSLog(@"the my protocol is running!");
}
-(id)initWithInteger:(NSInteger) i
{
self = [super init];
if(self)
{
self.integer = i;
}
return self;
}
-(void)print
{
NSLog(@"integer=%ld",self.integer);
}
-(void) initialize
{
NSLog(@"Integer's initialization succeed.");
}
@end
//主函数测试这两种协议的实现
// main.m
// 协议
//
// Created by ma c on 15/8/12.
// Copyright (c) 2015年. All rights reserved.
// #import <Foundation/Foundation.h>
#import "Teacher.h"
#import "Student.h"
#import "Myprotocol.h"
int main(int argc, const char * argv[])
{
@autoreleasepool
{
Teacher *teacher = [[Teacher alloc]init]; //老师设置学生代理实现老师设置的协议(TeacherDelegate)
Student *student = [[Student alloc]init];
[teacher setDelegate:student];
[teacher ordering];
printf("\n"); //我设置学生代理实现我设置的协议(Myprotocol)
Student *stu = [[Student alloc]initWithInteger:];
[stu show2];
[stu print];
[stu initialize];
}
return ;
}
//运行结果
-- ::51.498 协议[:] the teacher's protocol is running!
-- ::51.499 协议[:] teacher is ordering!
-- ::51.499 协议[:] student stand up.
-- ::51.500 协议[:] student answer question.
-- ::51.500 协议[:] student set down! -- ::51.500 协议[:] the my protocol is running!
-- ::51.500 协议[:] integer=
-- ::51.500 协议[:] Integer's initialization succeed.
Program ended with exit code:
Objective-C:在类中设置不同协议的更多相关文章
- 在client类中设置访问属性 address,business和individua
php 5.4中的traits,是新引入的特性,中文还真不知道如何准确翻译好.其实际的目的, 是为了有的场合想用多继承,但PHP又没多继承 ,于是就发明了这样的一个东西. Traits可以理解为一组能 ...
- php 类中设置成员属性方法
class FileUpload { private $path = "./uploads"; //上传文件保存的路径 private $allowtype = array('jp ...
- springmvc+hibernate在实体类中设置外键
1.表User id主键,username,password,dept... 表Attendence id主键,uid外键,time... @ManyToOne @JoinColumn(name = ...
- iOS 如何在自定义类中支持 "[]" 运算符
在相应类中实现如下协议即可. 1.字典类 - (id)objectForKeyedSubscript:(NSObject <NSCopying> *)key; - (void)setObj ...
- ASP.NET MVC中设置跨域
ASP.NET MVC中设置跨域 1.什么是跨域请求 js禁止向不是当前域名的网站发起一次ajax请求,即使成功respone了数据,但是你的js仍然会报错.这是JS的同源策略限制,JS控制的并不是我 ...
- 自定义类属性设置及setter、getter方法的内部实现
属性是可以说是面向对象语言中封装的一个体现,在自定义类中设置属性就相当于定义了一个私有变量.设置器(setter方法)以及访问器(getter方法),其中无论是变量的定义,方法的声明和实现都是系统自动 ...
- js基础 js自执行函数、调用递归函数、圆括号运算符、函数声明的提升 js 布尔值 ASP.NET MVC中设置跨域
js基础 目录 javascript基础 ESMAScript数据类型 DOM JS常用方法 回到顶部 javascript基础 常说的js包括三个部分:dom(文档document).bom(浏览器 ...
- C++ 理解类 和 类中的public、protected、private
我们要明确,不只是C++有类,很多语言也会用到类,因为现在很多都是面向对象编程... 在c++中,关于类的理解,个人理解是这样的,具有共同属性的一个集合被称为类, 比如说人这个集合,具有性别,年龄,出 ...
- 【IOS 开发】Objective - C 面向对象高级特性 - 包装类 | 类处理 | 类别 | 扩展 | 协议 | 委托 | 异常处理 | 反射
一. Objective-C 对象简单处理 1. 包装类 (1) 包装类简介 NSValue 和 NSNumber : -- 通用包装类 NSValue : NSValue 包装单个 short, i ...
随机推荐
- gitlab-针对API,获取私有令牌
Gitlab有一个强大的API系统,几乎所有的功能都可以在web中执行,当然也可以通过API来执行,为了使用API,需要从Gitlab中获取私有token. 执行步骤: 1. 登陆Gitlab服务器 ...
- ESLint处理
当有遇到下划线的问题,会提示有问题,无法通过检测 需要在代码的前面加入以下代码就可以解决,地址是:https://stackoverflow.com/questions/44126983/eslint ...
- PHP版本--HTTP session cookie原理及应用
PHP 的COOKIE cookie 是一种在远程浏览器端储存数据并以此来跟踪和识别用户的机制. PHP在http 协议的头信息里发送cookie,因此 setcookie()函数必须在其它 ...
- 【记录】【持续更新】mybatis使用记录
1.> < 等符号在mybatis中的sql语句需要转义 > : > < : < 2.mybatis动态选择 <choose> <when te ...
- Spring单例 和 Scope注解
关键字 @Scope @Qualifier Singleton 单例 Spring是单例模式.结合Springboot的例子. Controller @Autowired private Tes ...
- Elasticsearch源码分析 | 单节点的启动和关闭
本文主要简要介绍Elasticsearch单节点的启动和关闭流程.Elasticsearch版本:6.3.2 相关文章 1.Google Guice 快速入门 2.Elasticsearch 中的 G ...
- iOS 9应用开发教程之ios9的视图
iOS 9应用开发教程之ios9的视图 了解IOS9的视图 在iPhone或者iPad中,用户看到的和摸到的都是视图.视图是用户界面的重要组成元素.本节将主要讲解ios9视图的添加.删除以及位置和大小 ...
- xml javascript
1.XMLHttpRequest对象 创建XMLHttpRequest对象 xmlhttp=new XMLHttpRequest(); ##老版本的 Internet Explorer (IE5 和 ...
- CF1060E Sergey and Subway 思维
分两种情况讨论 一种为奇数长为$L$的路径,在经过变化后,我们需要走$\frac{L}{2} + 1$步 一种为偶数长为$L$的路径,在变化后,我们需要走$\frac{L}{2}$步 那么,我们只需要 ...
- 【枚举】【贪心】Codeforces Round #482 (Div. 2) B. Treasure Hunt
题意:给你3个字符串,3个人各对自己的字符串执行n轮操作,每一次选择一个字符变为任意一个和原来不同的字符.最后问你谁能使自己的串中的任意重复子串出现的次数最大化. 显然只需关注字符而非子串. 枚举每个 ...