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
的行中为零。由于 delegate2
是 weak
属性,因此它不会使对象保持活动状态。如果您没有对该对象的其他强引用,那么它将被释放并将 delegate2
属性 设置为 nil。
是的,您可以拥有任意数量的代表。但是您可能对用法有点困惑。是 delegate2
nil
吗?您是否正在分配某些 class 确认 GetMyIndexDelegate
的实例?请首先验证
看看这里
我有一个 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
的行中为零。由于 delegate2
是 weak
属性,因此它不会使对象保持活动状态。如果您没有对该对象的其他强引用,那么它将被释放并将 delegate2
属性 设置为 nil。
是的,您可以拥有任意数量的代表。但是您可能对用法有点困惑。是 delegate2
nil
吗?您是否正在分配某些 class 确认 GetMyIndexDelegate
的实例?请首先验证
看看这里