2016-03-18 3 views
1

Я работаю над приложением, где вы можете поместить булавки на карту и посмотреть изображения Flickr, связанные с этим местоположением.Переопределение инициализаторов в Swift

Приложение почти работает, но у меня проблема с инициализаторами в некоторых классах. Конкретным примером может служить следующее:

override init() { 
    session = NSURLSession.sharedSession() 
    super.init() 
} 

convenience init(delegate:HTTPClientProtocol) { 
    self.init() 
    self.delegate = delegate 
} 

Может кто-то пожалуйста, помогите мне понять, что случилось с этим кодом? На первой строчке, сообщение об ошибке говорит

Initializer не отменяет назначенный инициализатору от его суперкласса

и на линии с self.init() ошибка

Значение типа '->' не имеет значения 'init'

+1

Какой базовый класс вы наследуете? –

ответ

1

Если вы унаследовав от NSObject, ваших override init работы, так как вы отменяя базовый инициализатор для NSObject:

protocol HTTPClientProtocol { } 

class NSObj: NSObject { 

    var session: NSURLSession! 
    var delegate: HTTPClientProtocol? 

    override init() { 
     session = NSURLSession.sharedSession() 
     super.init() 
    } 

    convenience init(delegate:HTTPClientProtocol) { 
     self.init() 
     self.delegate = delegate 
    } 
} 

Если ваш класс является базовым классом, который не наследует от любого другого класса, ваш override init воны» t, так как у вас нет инициализатора базового класса для переопределения. Просто создайте инициализатор и инициализатор удобства, который вызывает назначенный инициализатор, который вы только что создали:

protocol HTTPClientProtocol { } 

class Obj { 

    var session: NSURLSession! 
    var delegate: HTTPClientProtocol? 

    init() { 
     session = NSURLSession.sharedSession() 
    } 

    convenience init(delegate:HTTPClientProtocol) { 
     self.init() 
     self.delegate = delegate 
    } 
} 
Смежные вопросы