2015-04-12 33 views
0

我想展開一個委託的功能,我一直在使用它來接受兩種不同的類型作爲第二個參數。當我嘗試添加重載的方法時,出現兩個錯誤:有沒有辦法在協議中重載方法?

所以我的問題是,有沒有一種方法可以在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) { 
      ... 
} 
+0

問題標題的答案是肯定的。但是從你的問題的角度來看,你似乎希望做更多的事情,而問題在於你如何去做。你能否發佈一些更多的示例代碼(即你如何實現這個類,以及你如何通過代理) –

+0

已更新爲顯示更多代碼 –

+1

你是否還在ViewController內部實現了'func didChangeState(#sender:SettingCell,time:Int)'? –

回答

0

最直接的答案是YES 有一種方法,在協議重載的方法,我是非常有有我只聽取了錯誤信息。

我只是忘了在我的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建議,這可能是使用泛型類型而不是重載方法的好時機。

相關問題