协议委托不调用函数

Protocol delegate doesn't call function

我在我的项目中实现了 side menu from github。我正在尝试在其中添加 protocol 。这样,当 cell 得到 selected 时,另一个 class(主 viewController)中的函数将被调用。这是我的代码:

tableView.swift

protocol menuTableViewProtocol {
    func didSelectCell(SelectedCellNumber : Int)
}

var delegate : menuTableViewProtocol?

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    self.delegate?.didSelectCell(indexPath.row)
}

mainVC.swift

class MainViewController: UIViewController, menuTableViewProtocol {

    ...

    // Conforming to Protocal
    func didSelectCell(SelectedCellNumber: Int)
    {
        switch SelectedCellNumber {
        case 0:
            println("0")

        case 1:
            println("1")

        case 2:
            println("2")

        default:
            println("0101010")
        }
    }
}

当我 运行 应用程序和 select 一个单元格时,没有任何反应。 didSelectRowAtIndexpath 确实被调用了。 (我插入了一个 println 并打印出来),但是 didSelectCellprotocol function)没有被调用。我做错了什么,我该如何解决?

正如您在评论中提到的,您不能将委托设置为自己,并且您的 类 之间没有直接关系,因此您应该使用 NSNotificationCenter 而不是协议和委托。

//Class一个(mainVC.swift)

 //Add Observer in init method
 NSNotificationCenter.defaultCenter().addObserver(self, selector: "handler:", name: "MyNotification", object: nil)

//Handler
func handler(notif: NSNotification) {
    println("MyNotification was handled");
    println("userInfo: \(notif.userInfo)");
    println("SelectedCellNumber \(notif.userInfo!["selectedCellNumber"])"); //Validate userInfo here. it could be nil

}

//Class乙(tableView.swift)

// Call from any method
NSNotificationCenter.defaultCenter().postNotificationName("MyNotification", object: nil, userInfo: ["selectedCellNumber" : indexPath.row]);

更多细节,你可以按照一些教程;

http://derpturkey.com/nsnotificationcenter-with-swift/