Как мне сделать класс соответствующим протоколу в swift?

20

Мне нужно, чтобы класс соответствовал протоколу в Swift для реализации делегата. Как бы я это сделал?

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

2 ответа

41
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
2

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 больше не являются Неявно развернутые дополнительные файлы '

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