【问题标题】:How can I access to the methods of a class when there is multiple inheritance on Swift?当 Swift 上存在多重继承时,如何访问类的方法?
【发布时间】:2016-09-12 07:53:33
【问题描述】:

我有一个继承自另一个类的类。

class Profile: UserData{
}

同时UserData 继承自UIViewController

问题来了,因为我需要Profile 类也继承自UITabBarController,并且我需要从Profile 类访问UserData 类的方法。

我试过的是:

class Profile: UITabBarController{
    override func viewDidLoad() {
        super.viewDidLoad()

        UserData().doStuff()
    }
}

但这对我不起作用,因为我需要继承完整的类(该方法仅在我使用 class Profile: UserData 时有效)。

我知道协议,我试图在协议上继承 UserData 类,但它也是不允许的。我也尝试在该协议上复制 UserData 类的方法,但它给了我以下错误:

协议方法可能没有主体

由于目前不可能进行多重继承,是否可以在Profile 继承的类上使用UserData 的所有方法(好像我已经继承了它)同一时间来自UITabBarController

提前致谢!

【问题讨论】:

  • 不,这是不可能的。此外,如果您的类需要继承多个类,那么您的设计很有可能存在缺陷。
  • 您能告诉我们您到底想要实现什么(就功能/用户界面而言)?我非常怀疑您是否需要拥有一个继承自 UIViewControllerUITabBarController 的类...
  • @jcaron 我需要UITabBarController 中的个人菜单,它是在UserData 上创建的。
  • “在”是什么意思?作为标签?您不需要为此子类化 UITabBarController,您可以创建一个常规的 UITabBarController 并提供您的自定义 UIViewController 作为其视图控制器之一。
  • 注意:您可能会将类的继承与视图控制器的父子关系混淆。它们完全不相关。

标签: ios swift inheritance multiple-inheritance


【解决方案1】:

您需要使用Protocol and delegates - apple doc。正如您所说,您尝试了协议,那么您在实现中一定犯了一些错误。否则,这可以由协议和委托处理。

请参考我在上段中分享的苹果文档。

您的 profile 班级应该是您的 userdata 班级的代表。然后它可以访问它的方法。

你的车也推荐Quick Guide to Swift Delegates

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-14
    • 2014-12-27
    • 2014-11-10
    • 1970-01-01
    • 2013-12-29
    • 1970-01-01
    • 2017-07-22
    • 1970-01-01
    相关资源
    最近更新 更多