2014-07-09 10 views
11

Se io uso il seguente codice mi mostra errore "Tipo 'HttpConnection' non è conforme al protocollo 'NSObjectProtocol'"Perché in fretta non possiamo adottare un protocollo senza ereditarietà di una classe da NSObject?

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

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

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

Se i sottoclasse HttpConnection per NSObject allora funziona bene. Quindi la mia domanda è quando ho bisogno di adottare il protocollo NSURLConnectionDataDelegate in modo rapido perché devo ereditare la classe da NSObject?

+0

Correlato: http://stackoverflow.com/q/24991018/242933 – ma11hew28

risposta

33

NSURLConnectionDataDelegate eredita da NSURLConnectionDelegate che eredita da NSObjectProtocol.

Ciò significa che oltre all'implementazione di tutti i metodi da NSURLConnectionDataDelegate e NSURLConnectionDelegate, è necessario implementare tutti i metodi da NSObjectProtocol (ad esempio uguaglianza, hash).

Non li hai implementati, è un tuo errore. Se erediti da NSObject, tutti i metodi NSObjectProtocol sono già stati implementati per te.

+0

Grazie sì ho visto che tutti i metodi in NSObjectProtocol sono il metodo richiesto :) –

4

Perché nella documentation si dice:

Il protocollo NSURLConnectionDataDelegate descrive i metodi che dovrebbero essere implementate dal delegato per un'istanza della classe NSURLConnection . Molti metodi in questo protocollo esistevano come parte di un protocollo informale nelle versioni precedenti di OS X e iOS.

In aggiunta ai metodi descritti in questo protocollo, un delegato NSURLConnection deve anche implementare i metodi descritti nel protocollo NSURLConnectionDelegate.

e NSURLConnectionDelegate sono conformi a NSObject. Basta ereditare la tua classe da NSObject e sarai a posto.

Problemi correlati