Почему в быстрой мы не можем принять протокол без наследования класса из NSObject?
Если я использую следующий код, он показывает мне ошибку
"Тип" 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, то он отлично работает. Итак, мой вопрос в том, когда мне нужно быстро принять протокол NSURLConnectionDataDelegate, почему мне нужно наследовать класс из NSObject?
Ответы
Ответ 1
NSURLConnectionDataDelegate
сам наследует от NSURLConnectionDelegate
, который наследует от NSObjectProtocol
.
Это означает, что помимо реализации всех методов из NSURLConnectionDataDelegate
и NSURLConnectionDelegate
вам также необходимо реализовать все методы из NSObjectProtocol
(например, равенство, хэш).
Ты не реализовал их, свою ошибку. Если вы наследуете от NSObject
, все эти методы NSObjectProtocol
уже реализованы для вас.
Ответ 2
Потому что в documentation говорится:
Протокол NSURLConnectionDataDelegate описывает методы, которые должны должен быть реализован делегатом для экземпляра NSURLConnection класс. Многие методы в этом протоколе существовали как часть неофициального протокол в предыдущих версиях OS X и iOS.
В дополнение к методам, описанным в этом протоколе, Делегат NSURLConnection должен также реализовать описанные методы в протоколе NSURLConnectionDelegate.
и NSURLConnectionDelegate соответствует NSObject. Просто сделайте свой класс наследованным от NSObject, и вам будет хорошо идти.