为什么在swift中我们不能在没有继承NSObject类的情况下采用协议?

时间:2014-07-09 09:44:35

标签: swift

如果我使用以下代码,它会显示错误  “类型'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,那么它可以正常工作。所以我的问题是当我需要在swift中采用NSURLConnectionDataDelegate协议时为什么我需要从NSObject继承该类?

2 个答案:

答案 0 :(得分:41)

NSURLConnectionDataDelegate本身继承自NSURLConnectionDelegate继承的NSObjectProtocol

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

你没有实施它们,这是你的错误。如果您继承自NSObject,则已为您实施了所有NSObjectProtocol方法。

答案 1 :(得分:4)

因为它在documentation中说:

  

NSURLConnectionDataDelegate协议描述了应该的方法   由委托实现NSURLConnection的实例   类。该协议中的许多方法都是非正式的一部分   以前版本的OS X和iOS中的协议。

     

除了本协议中描述的方法外,还有   NSURLConnection委托也应该实现所描述的方法   在NSURLConnectionDelegate协议中。

和NSURLConnectionDelegate符合NSObject。只需让你的类继承自NSObject,你就会好起来。