为啥某个协议在没有实现它的类的情况下工作?

Posted

技术标签:

【中文标题】为啥某个协议在没有实现它的类的情况下工作?【英文标题】:Why does a certain Protocol work without a class that implements it?为什么某个协议在没有实现它的类的情况下工作? 【发布时间】:2013-03-24 16:47:23 【问题描述】:

我在委托和数据源等协议方面做了很多工作,最近我使用UIKeyInput 协议进行了一些工作。 我已经习惯了self.tableView.delegate = self 这样的事情,但是UIKeyInput 我不需要那样做。但是我实现的协议方法(例如insertText: 等)仍然被调用。

有人可以向我解释这是如何工作的吗?

非常感谢您的帮助!

【问题讨论】:

你在哪个类上实现了UIKeyInput UIView的自定义子类 它以某种方式控制了你的自我。也许在右舷/zib? 不涉及... 【参考方案1】:

Cocoa Touch 框架有一个“响应者链”的概念,这就是它如何确定在哪里传递 UI 输入事件。 “第一响应者”位于响应者链的头部。当 ios 有键盘输入事件时,它会检查当前的第一响应者是否支持 UIKeyInput 协议,如果支持则调用这些方法。

您不需要为另一个对象注册为 UIKeyInputDelegate,因为框架将这些消息的接收者定义为第一响应者。

【讨论】:

完全有道理!非常感谢:)

以上是关于为啥某个协议在没有实现它的类的情况下工作?的主要内容,如果未能解决你的问题,请参考以下文章

【iOS】协议(Protocol)和代理(Delegate)

为啥QQ主要用UDP协议

什么是HOPOPT协议以及socket()如何工作?

协议与委托

Python 接口:从协议到抽象基类

在 Swift 中使用协议的加载器