Как сделать класс совместимым с делегатом в swift?

17

Мне нужно, чтобы класс соответствовал делегату в Swift. Как мне это сделать?

    
задан Phillip 03.06.2014 в 22:35
источник

2 ответа

38
class YourClass: SuperClassIfAny, FirstProtocol, SecondProtocol {
}

Обратите внимание, что для некоторых протоколов требуется реализовать методы делегирования. Например, UITableViewDataSource требует для реализации

func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int

и

func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell!

Если они не реализованы классом, соответствующим протоколу, Xcode даст вам ошибку компиляции (всегда проверяйте объявление протокола, Cmd + Click покажет вам, какие методы вы должны ).     

ответ дан Oscar Swanros 03.06.2014 в 22:40
источник
  • Пожелайте, чтобы он показал более полезную ошибку, чем: «не соответствует протоколу», –  Adam Waite 10.06.2014 в 15:06
  • Согласитесь, я действительно потратил некоторое время, пытаясь найти, почему он не компилируется. Я думаю, что это хорошо, однако, предотвращает вас от глупых ошибок. Было бы здорово, если бы они добавили более описательную ошибку, все еще :-P –  Oscar Swanros 10.06.2014 в 18:21
3
___ answer25644504 ​​___

Xcode 6 beta 7 слегка изменил протокол для UITableViewDataSource, чтобы он соответствовал следующему синтаксису для двух требуемых реализаций:

6b7: UITableViewDataSource

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell!

по сравнению с 6b6

func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int

func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell

Ключевым отличием является то, что UITableView, NSIndexPath и UITableViewCell больше не « Неявно отключенные опции

    
___ qstntxt ___

Мне нужно, чтобы класс соответствовал делегату в Swift. Как мне это сделать?

    
___ tagios ___ iOS - это мобильная операционная система, работающая на Apple iPhone, iPod touch и iPad. Используйте этот тег [ios] для вопросов, связанных с программированием на платформе iOS. Используйте связанные теги [object-c] и [swift] для вопросов, специфичных для этих языков программирования. ___ qstnhdr ___ Как сделать класс совместимым с делегатом в swift? ___ tagswift ___ Swift - это общий язык программирования с открытым исходным кодом, разработанный Apple Inc. для своих платформ и Linux. Используйте тег только для вопросов о языковых функциях или требуя кода в Swift. Используйте теги [ios], [osx], [watch-os], [tvos], [cocoa-touch] и [какао] для (языковых агностик) вопросов о платформах или фреймворках. ___ answer24024534 ___
%pre%

Обратите внимание, что для некоторых протоколов требуется реализовать методы делегирования. Например, %code% требует для реализации

%pre%

и

%pre%

Если они не реализованы классом, соответствующим протоколу, Xcode даст вам ошибку компиляции (всегда проверяйте объявление протокола, Cmd + Click покажет вам, какие методы вы должны ).     

___
ответ дан Tarei SuperChur King 03.09.2014 в 14:35
источник
  • -1; это не позволяет удаленно ответить на вопрос. –  Mark Amery 15.01.2018 в 12:07