为啥我们不能在不从 NSObject 继承类的情况下迅速采用协议?
Posted
技术标签:
【中文标题】为啥我们不能在不从 NSObject 继承类的情况下迅速采用协议?【英文标题】:Why in swift we cannot adopt a protocol without inheritance a class from NSObject?为什么我们不能在不从 NSObject 继承类的情况下迅速采用协议? 【发布时间】:2014-07-09 09:44:34 【问题描述】:如果我使用以下代码,它会显示错误 “类型‘HttpConnection’不符合协议‘NSObjectProtocol’”
class HttpConnection : NSURLConnectionDataDelegate
var urlConnection : NSURLConnection?
weak var delegate : HttpConnecting?
init(delegate:HttpConnecting)
self.delegate = delegate;
func startAsynRequestWithUrlString(url:NSString, withMethod:NSString)
如果我将 HttpConnection 子类化为 NSObject,那么它可以正常工作。所以我的问题是,当我需要快速采用 NSURLConnectionDataDelegate 协议时,为什么我需要从 NSObject 继承类?
【问题讨论】:
相关:***.com/q/24991018/242933 【参考方案1】:NSURLConnectionDataDelegate
本身继承自 NSURLConnectionDelegate
,而 NSURLConnectionDelegate
继承自 NSObjectProtocol
。
这意味着除了实现NSURLConnectionDataDelegate
和NSURLConnectionDelegate
中的所有方法之外,您还必须实现NSObjectProtocol
中的所有方法(例如相等、哈希)。
你没有实现它们,那是你的错误。如果你继承自NSObject
,那么所有NSObjectProtocol
方法都已经为你实现了。
【讨论】:
谢谢,是的,我看到 NSObjectProtocol 中的所有方法都是必需的方法:)【参考方案2】:因为在documentation 中它说:
NSURLConnectionDataDelegate 协议描述了应该 由委托为 NSURLConnection 的一个实例实现 班级。该协议中的许多方法作为非正式协议的一部分存在 以前版本的 OS X 和 ios 中的协议。
除了本协议中描述的方法,一个 NSURLConnection 委托也应该实现所描述的方法 在 NSURLConnectionDelegate 协议中。
并且 NSURLConnectionDelegate 符合 NSObject。只要让你的类继承自 NSObject 就可以了。
【讨论】:
以上是关于为啥我们不能在不从 NSObject 继承类的情况下迅速采用协议?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我们不能在不添加偏差或将其转换为 2 或 1 补码的情况下存储 IEEE 浮点数的指数? [复制]
是否可以在不从 DOM 读取的情况下在 Angular 中读取元素的文本内容?