2014-07-09 4 views
11

Wenn ich den folgenden Code verwenden es mir zeigt Fehler „Typ‚Httpconnection‘entspricht nicht Protokoll‚NSObjectProtocol‘“Warum in Swift können wir ein Protokoll ohne Vererbung eine Klasse von NSObject nicht übernehmen?

class HttpConnection : NSURLConnectionDataDelegate { 
     var urlConnection  : NSURLConnection? 
     weak var delegate  : HttpConnecting? 

     init(delegate:HttpConnecting){ 
      self.delegate = delegate; 
     } 

     func startAsynRequestWithUrlString(url:NSString, withMethod:NSString){ 
     } 
    } 

Wenn ich Httpconnection zu NSObject Unterklasse dann funktioniert es gut. Also meine Frage ist, wenn ich NSURLConnectionDataDelegate Protokoll in Swift annehmen muss, warum ich die Klasse von NSObject erben muss?

+0

Related: http://Stackoverflow.com/q/24991018/242933 – ma11hew28

Antwort

33

NSURLConnectionDataDelegate erbt selbst von NSURLConnectionDelegate, die von NSObjectProtocol erbt.

Das bedeutet, dass Sie neben der Implementierung aller Methoden aus NSURLConnectionDataDelegate und NSURLConnectionDelegate auch alle Methoden aus NSObjectProtocol (z. B. Gleichheit, Hash) implementieren müssen.

Sie haben sie nicht implementiert, das ist Ihr Fehler. Wenn Sie von NSObject erben, sind alle diese Methoden NSObjectProtocol bereits für Sie implementiert.

+0

Dank ja, ich habe gesehen, dass alle Methoden in NSObjectProtocol Methode erforderlich sind :) –

4

Denn im documentation heißt es:

Das NSURLConnectionDataDelegate Protokoll Methoden beschreibt, die von den Delegierten für eine Instanz der Klasse NSURLConnection umgesetzt werden sollte. Viele Methoden in diesem Protokoll existierten als Teil eines informellen Protokolls in früheren Versionen von OS X und iOS.

Zusätzlich zu den in diesem Protokoll beschriebenen Methoden sollte ein NSURLConnection-Delegat auch die beschriebenen Methoden im NSURLConnectionDelegate-Protokoll implementieren.

und NSURLConnectionDelegate entspricht NSObject. Lassen Sie Ihre Klasse von NSObject erben und Sie werden gut gehen.

Verwandte Themen