Подтвердить что ты не робот

Почему в быстрой мы не можем принять протокол без наследования класса из 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?

4b9b3361

Ответ 1

NSURLConnectionDataDelegate сам наследует от NSURLConnectionDelegate, который наследует от NSObjectProtocol.

Это означает, что помимо реализации всех методов из NSURLConnectionDataDelegate и NSURLConnectionDelegate вам также необходимо реализовать все методы из NSObjectProtocol (например, равенство, хэш).

Ты не реализовал их, свою ошибку. Если вы наследуете от NSObject, все эти методы NSObjectProtocol уже реализованы для вас.

Ответ 2

Потому что в documentation говорится:

Протокол NSURLConnectionDataDelegate описывает методы, которые должны должен быть реализован делегатом для экземпляра NSURLConnection класс. Многие методы в этом протоколе существовали как часть неофициального протокол в предыдущих версиях OS X и iOS.

В дополнение к методам, описанным в этом протоколе, Делегат NSURLConnection должен также реализовать описанные методы в протоколе NSURLConnectionDelegate.

и NSURLConnectionDelegate соответствует NSObject. Просто сделайте свой класс наследованным от NSObject, и вам будет хорошо идти.