当前位置: 首页 > 面试题库 >

为什么不从NSObject继承类就不能迅速采用协议?

林祯
2023-03-14
问题内容

如果我使用以下代码,则会向我显示错误“类型’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继承该类?


问题答案:

NSURLConnectionDataDelegate本身NSURLConnectionDelegate继承NSObjectProtocol

这意味着除了实现NSURLConnectionDataDelegate,和中的所有方法外NSURLConnectionDelegate,您还必须实现,和中的所有方法NSObjectProtocol(例如,相等,哈希)。

您没有实现它们,这是您的错误。如果您从继承NSObject,则所有这些NSObjectProtocol方法都已经为您实现。



 类似资料:
  • 问题内容: 为什么以下代码不起作用(Python 2.5.2)? 我想创建一个类似的类,但具有不同的功能。显然我的函数永远不会被调用。而是调用原始文件并失败,因为它需要3个参数,而我传入了一个。 这里发生了什么?这是一个线索吗? 谢谢! 问题答案: 关于其他几个答案,这与用C本身实现的日期无关。该方法不做任何事情,因为它们是 不可变的 对象,因此构造函数()应该完成所有工作。您会看到相同的行为将i

  • 问题内容: 我尝试通过继承两个类来创建myPet,但是出现错误,例如: 然后定义了以下类,然后创建新的类myPets,我想同时继承Dog和Substance。但是错误:从类“狗”和“物质”的多重继承 问题答案: Swift不支持多重继承,遵循ObjectiveC。这不是从两个类继承: 它是从一类继承而采用的协议。在https://developer.apple.com/library/conten

  • 问题内容: 我有以下课程: 有没有搞错 ? 最糟糕的是我无法尝试super(),因为Exception是基于旧类的… 编辑:而且,是的,我试图切换继承/初始化的顺序。 EDIT2:我在Ubuntu8.10上使用CPython 2.4。您最近才知道这种信息很有用;-)。无论如何,这个小谜语已经让我的三个同事闭上了嘴。你会成为我今天最好的朋友… 问题答案: 两者和都在C中实现。 我认为您可以按照以下方

  • 问题内容: 我有那个代码 有时,强制转换为无效。当我看到。为什么会这样呢?我使用来自GitHub的SwiftSocket库。对不起我的英语不好。 当我的服务器发送大字符串时会发生这种情况。例如- 如果我收到一个消息对象(我的班级)-一切都会正常。但是,如果我收到4,5,6,…消息对象(我的班级),这有时会起作用。MAGIC :( 新版本的代码 问题答案: 注意:我不会讲Swift。以下代码可能无法

  • 问题内容: 我一直在看该类的源代码。对我来说,这似乎是一个普通的抽象类,带有受保护的构造函数。它不是最终的,它内部没有任何特殊的注释,并且不使用本机代码。但是,它不能直接子类化。实际上,以下代码无法编译: 我知道这是Java中的一个特殊类,并且我知道有充分的理由应禁止直接子类化。但是从技术上讲,您如何执行此行为?程序员是否可以创建类似的非最终类,尽管具有可访问的构造函数,该类仍不允许直接子类化?

  • 问题内容: 我一直在使用Guice的AOP来拦截一些方法调用。我的课程实现了一个接口,我想注释接口方法,以便Guice可以选择正确的方法。即使使用继承的注释对注释类型进行注释,实现类也不会继承Inherited的java doc中所述的注释: 还要注意,此元注释仅使注释从超类继承;已实现的接口上的注释无效。 这可能是什么原因?了解对象的类在运行时确实实现的所有接口并不是一件容易的事,因此在此决定背