【问题标题】:Abstraction in swift / iOS [closed]swift / iOS中的抽象[关闭]
【发布时间】:2021-06-08 17:59:01
【问题描述】:

我知道实现抽象 iOS 没有直接的方法,下面是我的做法。

protocol ParentClass: class {
  func doSomething()
  func doSomething1()
}

class ChildClassA: ParentClass {
  func doSomething() -> Bool {

  }

  func doSomething1() -> Bool {

  }
}

class ChildClassB: ParentClass {
  func doSomething() -> Bool {

  }

  func doSomething1() -> Bool {

  }
}

如何在 ParentClass 中声明初始化器?我想添加一个初始化器,它将为 ChildClassA 或 ChildClassB 创建对象。我基本上想要的是:如果设置了 Flag,则从 ChildClassA 执行 doSomething() 或从 ChildClassB 执行 doSomething()。

【问题讨论】:

  • 目前还不清楚您要达到的目标。但是,您不能从超类或协议调用子类实现。父级无法知道这些实现类型。
  • 那我的设计很可能是错误的。我想要的是一个具有 func 存根/声明的类/协议,并且这些 func 的实现将在其他类中。编辑:对不起,我试图在这里添加一个示例,但由于字符限制而无法添加。将更新我的问题。
  • “我想要的是一个具有 func 存根/声明的类/协议,并且这些 func 的实现将在其他类中”不清楚在这种情况下协议的用途。这听起来像是一个带有抽象方法的超类,必须被子类覆盖。例如,请参阅stackoverflow.com/questions/63831683/…。但是,您在问题中所说的“声明初始化程序”与您代码中的任何内容完全不一致,因此完全不清楚实际目标是什么。
  • 另外,这根本不是“抽象”通常的意思,这使得问题更加不透明。

标签: ios swift


【解决方案1】:

您可以向协议中添加初始化要求,如下所示:

protocol ParentProtocol: class {
    init(someArgument: String)
    func doSomething()
    func doSomething1()
}

(用你需要的任何东西替换someArgument: String)。我将名称从 ParentClass 更改为 ParentProtocol,因为它不是一个类,理解这一点很重要。

这意味着所有符合协议的类都必须实现一个带有这个签名的初始化器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-19
    • 1970-01-01
    • 1970-01-01
    • 2016-07-02
    • 1970-01-01
    • 1970-01-01
    • 2011-10-25
    • 2012-05-21
    相关资源
    最近更新 更多