有没有办法在协议中重载方法?

时间:2015-04-12 14:49:14

标签: swift interface delegates protocols overloading

我想扩展我一直用来接受两种不同类型作为第二个参数的委托的功能。当我尝试添加重载方法时,我收到两个错误:

所以我的问题是,有没有办法在swift中重载协议中的方法以允许不同的参数?

错误1

  

键入' ViewController'不符合协议' myCellDelegate'

错误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) {
            ...
}

1 个答案:

答案 0 :(得分: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在OP中所建议的那样,这可能是使用泛型类型而不是重载方法的好时机。