一起学Objective-C - Protocols

2023-11-22 04:18
文章标签 protocols 一起 objective

本文主要是介绍一起学Objective-C - Protocols,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Protocols有点像Java中的interface, 但是要更加灵活一点。


Objective-C中有两种Protocol:

 非正式的Protocol -  非正式的Protocol在其他语言中基本找不到对应的概念,但是却很有用,之后再详细学习。

正式Protocol - 我们提供一个对象应该响应的方法列表(在编译器可以校验),在运行期也可以检查某个对象是否遵守了某个protocol. 正式Protocol 比较像Java中的interface.



声明正式Protocol 

一个正式Protocol声明了一系列的方法, 下例中的@protocol LinkedList <List>表明List是LinkedList的父Protocol , 它将继承所有的List中的方法。

@protocol List
- (void) add:        (id) item;
- (void) remove:     (id) item;
- getAtIndex:        (int)idx;
- (void) clear;
@end@protocol LinkedList <List>
- (void) addFirst:   (id)item;
- (void) addLast:    (id)item;
- getFirst;
- getLast;
@end



实现正式Protocol
如果你需要让一个类遵守一个 Protocol, 你要在你的头文件(interface文件)中来声明,同时实现所有需要实现的方法。
@interface BiQueue <LinkedList>
{// instance variables ...
}// method declarations ...// [don't need to redeclare those for the LinkedList protocol]
- takeFirst
- takeLast
@end...@implementation BiQueue// must implement both List's and LinkedList's methods ...
- add:        (id) item
{// ...
}- addFirst:   (id)item
{// ...
}
@end

如果需要你可以让一个类遵守多个 Protocol, 可以像下例一样声明
@interface ContainerWindow < List, Window >...
@end


实现文件中则需要包含两个 Protocol中所有的方法。


使用Protocol

要使用一个正式Protocol, 只需要简单的像对象发Protocol中的消息。 如果你需要类型校验,有下面两种方式。

第一种你使用遵守了Protocol的类名来声明你的变量的类型

BiQueue queue = [[BiQueue alloc] init];// send a LinkedList message
[queue addFirst: anObject];


第二种方式需要使用下面这种特殊的语法。
// alternatively, we may stipulate only that an object conforms to the// protocol in the following way:
id<LinkedList> todoList = [system getTodoList];
task = [todoList getFirst];
...
这个例子我们只指明了 Protocol,而没有指明具体是那个实现类。


如果你不确信返回的对象是否遵守了某个 Protocol,你可以用下面的方法来进行校验
if ([anObject conformsToProtocol: aProtocol] == YES){// We can go ahead and use the object.}
else{NSLog(@"Object of class %@ ignored ... does not conform to protocol", NSStringFromClass([anObject class]));}


最后,你可以像在头文件(interface)中声明的一样,来指明一个对象遵守了多个 Protocol。
id <LinkedList, Window>   windowContainerOfUnknownClass;


这篇关于一起学Objective-C - Protocols的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/407444

相关文章

跟我一起玩《linux内核设计的艺术》第1章(四)——from setup.s to head.s,这回一定让main滚出来!(已解封)

看到书上1.3的大标题,以为马上就要见着main了,其实啊,还早着呢,光看setup.s和head.s的代码量就知道,跟bootsect.s没有可比性,真多……这确实需要包括我在内的大家多一些耐心,相信见着main后,大家的信心和干劲会上一个台阶,加油! 既然上篇已经玩转gdb,接下来的讲解肯定是边调试边分析书上的内容,纯理论讲解其实我并不在行。 setup.s: 目标:争取把setup.

社交平台找旅游搭子一起旅行靠谱吗?答案是不要太爽!

哈喽小伙伴们,今天要跟大家分享一个超级棒的小程序——咕哇找搭子!作为一个热爱自由行的人,最头疼的就是找不到志同道合的小伙伴。但自从用了这个咕哇小程序后,一切都变得简单又充满乐趣啦!🎉 上个月,我计划去云南旅行,就试着在咕哇上发布了我的行程信息。没想到很快就收到了几位朋友的回应,其中一位叫小莲的朋友特别投缘。我们不仅目的地一样,就连兴趣爱好都出奇地相似,于是我们就决定一起出发啦!👭

python打包exe如何把浏览器和geckodriver一起打包进去

一、目录结构:main.py同级目录下有一个浏览器包 二、调用浏览器的py修改:根据开发环境和打包环境选择浏览器和webdriver的路径 if getattr(sys, 'frozen', False):# 如果是打包的应用程序application_path = sys._MEIPASSelse:# 如果是开发环境application_path = os.path.dirna

eclipse中设置中文字体变大,注释字体变大,不跟代码字体一起变大

windows-preferences-general-appearance-colours and fonts 在basic里面找到最后TEXT FONT,点edit,在右下角脚本里面将西欧语言改成中欧语言 解决

跟我一起写 SIPp XML scenario file

编辑文件 uas.xml,内容为: <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE scenario SYSTEM "sipp.dtd"><scenario><recv request="INVITE"><action><ereg regexp="&lt;(sip:.*)&gt;" search_in="hdr" header="Contact

Core Text Objective-C Wrapper

Core Text Objective-C Wrapper https://github.com/akosma/CoreTextWrapper Introduction(介绍) One of the most promising and mysterious new frameworks introduced in iOS 3.2 is Core Text. Apple define

Objective-C ,ios,iphone开发基础:JSON解析(使用苹果官方提供的JSON库:NSJSONSerialization)

json和xml的普及个人觉得是为了简化阅读难度,以及减轻网络负荷,json和xml 数据格式在格式化以后都是一种树状结构,可以树藤摸瓜的得到你想要的任何果子。 而不格式化的时候json和xml 又是一个普普通通的字符串,在网络通信的时候也只需要请求一次,而不用每次为得到木一个值而重复的请求服务器或者目标主机, json和xml 都采用 键 - 值 的形式来存放数据。 xml 使用:

跟我一起学FPGA (二) 语法讲解

本章讲解 1 、Verilog 概述和基础知识; 2 、Verilog 程序框架和高级知识点; 3 、Verilog 编程规范。 1.Verilog 概述和基础知识 Verilog 是一种硬件描述语言,以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能. verilog的逻辑值:

微信公众号欢迎大家一起交流,一起分享

天涯何必曾相识,愿与诸君共奋进,2021年迎来了牛年,告别了2020年多灾多难的鼠年,祝福大家,在牛年里,小试牛刀,年气冲天。     欢迎大家,微信扫描,加入一起讨论分享。

一起来看Runway删库跑路背后的大瓜

惊奇发现:Runway真的run away 早上起床刷微博,突然发现一个惊爆消息:Runway在Hugging Face上的内容神秘消失。没有任何提前通知,Runway的主页只留了一句话:“我们不再对HuggingFace账号进行维护。”这让人摸不着头脑,赶紧去了解发生了什么。 真相还是谜?陈年旧案引发猜测 关于这一神操作,网友们众说纷纭。有一种说法是,与2022年上传的Stable Dif