2015-04-12 3 views
0

Я хотел бы расширить функциональность делегата, который я использовал, чтобы принять два разных типа в качестве второго параметра. Когда я пытаюсь добавить перегруженный метод, я получаю две ошибки:Есть ли способ перегрузить метод в протоколе?

Так что мой вопрос: Есть ли способ перегрузить метод в протоколе быстрым, чтобы разрешить разные параметры?

Ошибка 1

Тип 'ViewController' не соответствует протоколу 'myCellDelegate'

Error 2

Невозможно присвоить значение типа ' ViewController 'для значения типа' myCellDelegate? '

myCellDelegate.swift

protocol myCellDelegate { 

    func didChangeState(# sender: SettingCell, isOn: Bool) 

    func didChangeState(# sender: SettingCell, time: Int) // error 
} 

(в ViewController.Swift)

class ViewController: UITableViewController, UITableViewDataSource, UITableViewDelegate, myCellDelegate { 

cellForRowAtIndexPath

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCellWithIdentifier("CustomSettingCell") as! SettingCell 

     let section = sectionNames[0] 
     let logItem = logItems[indexPath.row] 

     cell.settingsLabel?.text = logItem.settingLabel 
     cell.settingsSwitch.on = logItem.switchState 

     cell.cellDelegate = self 


     return cell 
    } 

Использование

func didChangeState(#sender: SettingCell, isOn: Bool) { 
      ... 
} 
+0

Ответ на вопрос «да», абсолютно. Но из тела вашего вопроса, похоже, вы хотите сделать немного больше, и проблема заключается в том, как вы это делаете. Можете ли вы разместить еще несколько примеров кода (т.как вы реализуете класс и как вы передаете делегат) –

+0

обновлен, чтобы показать больше кода –

+1

Вы также внедрили 'func didChangeState (# sender: SettingCell, time: Int)' inside 'ViewController'? –

ответ

0

Непосредственный ответ ДА есть способ перегрузить метод в протоколе, и я был довольно много там было, я только слушал сообщения об ошибках.

Я просто забыл реализовать метод в своем ViewController. Хотя теперь это было очевидно для меня, в то время мне это не было очевидно, потому что имя метода было одинаковым.

Таким образом, окончательный код должен выглядеть следующим образом:

myCellDelegate.swift

protocol myCellDelegate { 

    func didChangeState(# sender: SettingCell, isOn: Bool) 

    func didChangeState(# sender: SettingCell, time: Int) 
} 

ViewController.swift

class ViewController: UITableViewController, UITableViewDelegate, myCellDelegate { 

    func didChangeState(#sender: SettingCell, isOn: Bool) { 
      ... 
    } 

    func didChangeState(#sender: SettingCell, time: Int) { 
      ... 
    } 

} 

Как @woodstock предложил в ОП, это вероятно, подходящее время для использования родового типа, а не для перегруженного метода.

Смежные вопросы