我有这样一个协议:

public  protocol SubmitAgeDelegate : class  {
func changeSubmitButtonBool()
}

问题是我想在泛型类中调用它。
open class GenericController<UICollectionViewCell,UICollectionReusableView> {

weak var submitAgeDelegate: SubmitAgeDelegate?

在uitapGestureRecognizer中
func tapGestureDidRecognize(_ gesture: UITapGestureRecognizer) {

    if let myAgeDelegate = self.submitAgeDelegate {
        print("inside delegate")   //Never gets inside
        myAgeDelegate.changeSubmitButtonBool()
    }

}

不太清楚为什么没人叫它?类似的方法也适用于带有ibaction函数的常规类。
在我的另一堂课上:
open class MyCell: ActionCell, SubmitAgeDelegate {
weak var submitAgeDelegate: SubmitAgeDelegate?

public override init(frame: CGRect) {
    super.init(frame: frame)
    submitAgeDelegate  = self
    initialize()
}

// Delegate
public func changeSubmitButtonBool(){

    print("called ")
}

最佳答案

您从未设置过submitAgeDelegateGenericController。在MyCell类中有一个同名的成员没有帮助。
您需要获得对GenericController的引用才能设置其委托;这是不可能的。(这与泛型没有任何关系;对于非泛型类也是一样的。)因为它看起来像是用作UICollectionViewCell,所以可以使用在tableView:cellForRowAtIndexPath:或类似文件中所做的引用。

09-27 00:34