Class 中的第二个代表可能在 Swift 中?

Second delegate in Class possible in Swift?

我有一个 class,我想从 UIPageViewController 的自定义子 class 接收数据。为此,我在 class 中定义了一个正常的协议 我想接收信息:

protocol GetMyIndexDelegate: class {
    func getIndex()
}

class LandingPageViewController: UIViewController, GetMyIndexDelegate {

func getIndex() {
    print("IT GOT CALLED")
}}

然后在class里面发送信息:

class pageViewController: UIPageViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate {

weak var delegate2: GetMyIndexDelegate?

func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {
    if (completed && finished) {
        if let currentVC = pageViewController.viewControllers?.last {
            let index = vcArr.index(of: currentVC)
            delegate2?.getIndex()
        }
    }
}

我不得不在这里使用 delegate2 因为已经有一个委托 UIPageViewControllerDelegate 如果我使用 delegate 我会得到一个错误

'cannot overide property with type UIPageViewControllerDelegate'

然而,当我 运行 应用程序并滚动页面时,函数 getIndex 没有被调用。

我不确定您是否可以在同一个 class 中拥有 2 个代表。每次滚动页面和索引更改时,我都看不到 运行 启用 getIndex 函数的另一种方法。

我怀疑 delegate2 在您尝试调用 getIndex 的行中为零。由于 delegate2weak 属性,因此它不会使对象保持活动状态。如果您没有对该对象的其他强引用,那么它将被释放并将 delegate2 属性 设置为 nil。

是的,您可以拥有任意数量的代表。但是您可能对用法有点困惑。是 delegate2 nil 吗?您是否正在分配某些 class 确认 GetMyIndexDelegate 的实例?请首先验证

看看这里

Delegate Example