gpt4 book ai didi

swift - 如何覆盖私有(private)方法并快速调用 super?

转载 作者:搜寻专家 更新时间:2023-10-31 08:24:49 25 4
gpt4 key购买 nike

我们知道,如果你需要在swift中覆盖基类中的方法,你必须在该方法之前声明“override”关键字。如果该方法是私有(private)的,您仍然可以快速“覆盖”它,只需添加 NO override 关键字即可。但是,你不能调用 super.MethodName(),这是我的问题。

比如说,UINavigationController 中有一个私有(private)方法,即“_startCustomTransition”,我可以在我的自定义 MyNavigationController.swift 中执行此操作

class MyNavigationController: UINavigationController {
func _startCustomTransition() {
// I can not call super._startCustomTransition()
}
}

那么,我该如何进行 super 调用呢?谢谢。

最佳答案

你必须让 Swift 编译器知道存在这样的方法。为此,您可以简单地将 Object-C 扩展声明添加到项目的桥接 header 中:

@import UIKit;

@interface UINavigationController(PrivateMethods)

- (void)_startCustomTransition;

@end

现在,您可以毫无问题地覆盖该方法:

class MyNavigationController: UINavigationController {
override func _startCustomTransition() {
super._startCustomTransition()
}
}

编辑:您必须在 Objective-C 扩展中声明该方法,因为我看不出在不实现它的情况下在 Swift 扩展中声明方法的方法。非常欢迎提出建议。 :)

关于swift - 如何覆盖私有(private)方法并快速调用 super?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45228647/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com