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

Sau*_*pal 22 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){
        }
    }
Run Code Online (Sandbox Code Playgroud)

如果我将HttpConnection子类化为NSObject,那么它可以正常工作.所以我的问题是当我需要在swift中采用NSURLConnectionDataDelegate协议时为什么我需要从NSObject继承该类?

Sul*_*han 43

NSURLConnectionDataDelegate本身继承自NSURLConnectionDelegate哪些继承自NSObjectProtocol.

这意味着,除了实现所有从方法NSURLConnectionDataDelegate,并且NSURLConnectionDelegate,你还必须实现所有从方法NSObjectProtocol(如平等,哈希).

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