如果我使用以下代码,它会显示错误 “类型'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继承该类?
答案 0 :(得分:41)
NSURLConnectionDataDelegate
本身继承自NSURLConnectionDelegate
继承的NSObjectProtocol
。
这意味着除了实现NSURLConnectionDataDelegate
和NSURLConnectionDelegate
中的所有方法之外,还必须实现NSObjectProtocol
中的所有方法(例如,相等,哈希)。
你没有实施它们,这是你的错误。如果您继承自NSObject
,则已为您实施了所有NSObjectProtocol
方法。
答案 1 :(得分:4)
因为它在documentation中说:
NSURLConnectionDataDelegate协议描述了应该的方法 由委托实现NSURLConnection的实例 类。该协议中的许多方法都是非正式的一部分 以前版本的OS X和iOS中的协议。
除了本协议中描述的方法外,还有 NSURLConnection委托也应该实现所描述的方法 在NSURLConnectionDelegate协议中。
和NSURLConnectionDelegate符合NSObject。只需让你的类继承自NSObject,你就会好起来。