the - ¿Por qué en swift no podemos adoptar un protocolo sin herencia una clase de NSObject?
swift wikipedia (2)
Porque en la documentation dice:
El protocolo NSURLConnectionDataDelegate describe los métodos que debe implementar el delegado para una instancia de la clase NSURLConnection. Muchos métodos en este protocolo existían como parte de un protocolo informal en versiones anteriores de OS X y iOS.
Además de los métodos descritos en este protocolo, un delegado de NSURLConnection también debe implementar los métodos descritos en el protocolo NSURLConnectionDelegate.
y NSURLConnectionDelegate se ajusta a NSObject. Simplemente haga que su clase herede de NSObject y estará listo para comenzar.
Si utilizo el siguiente código, me muestra el error "El tipo ''HttpConnection'' no cumple con el protocolo ''NSObjectProtocol''"
class HttpConnection : NSURLConnectionDataDelegate {
var urlConnection : NSURLConnection?
weak var delegate : HttpConnecting?
init(delegate:HttpConnecting){
self.delegate = delegate;
}
func startAsynRequestWithUrlString(url:NSString, withMethod:NSString){
}
}
Si yo subclase HttpConnection a NSObject, entonces funciona bien. Así que mi pregunta es cuando necesito adoptar el protocolo NSURLConnectionDataDelegate en swift ¿por qué necesito heredar la clase de NSObject?
NSURLConnectionDataDelegate
se hereda de NSURLConnectionDelegate
que hereda de NSObjectProtocol
.
Eso significa que además de implementar todos los métodos de NSURLConnectionDataDelegate
y NSURLConnectionDelegate
, también tiene que implementar todos los métodos de NSObjectProtocol
(por ejemplo, NSObjectProtocol
, hash).
No los implementaste, ese es tu error. Si hereda de NSObject
, todos los métodos de NSObjectProtocol
ya están implementados para usted.