2014-07-09 37 views
11

如果我使用下面的代碼就說明我錯誤 「類型‘的HttpConnection’不符合協議‘NSObjectProtocol’」爲什麼在swift中我們無法採用沒有繼承NSComObject類的協議?

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

相關:http://stackoverflow.com/q/24991018/242933 – ma11hew28

回答

33

NSURLConnectionDataDelegate本身繼承自NSURLConnectionDelegate,它繼承自NSObjectProtocol

這意味着除了實現NSURLConnectionDataDelegateNSURLConnectionDelegate中的所有方法之外,還必須實現NSObjectProtocol(例如等號,散列)中的所有方法。

你沒有實現它們,那是你的錯誤。如果您從NSObject繼承,則所有NSObjectProtocol方法已經爲您執行。

+0

謝謝是的,我看到NSObjectProtocol中的所有方法都是必需的方法:) –

4

因爲在documentation它說:

的NSURLConnectionDataDelegate協議描述應該 由委託的NSURLConnection的 類的實例來實現的方法。該協議中的許多方法作爲OS X和iOS以前版本中非正式的 協議的一部分存在。

除了本協議中描述的方法外,NSURLConnection代理還應實現NSURLConnectionDelegate協議中描述的 方法。

和NSURLConnectionDelegate符合NSObject。只要讓你的類繼承自NSObject,你就會很開心。