oop - 如何向必须实现所需初始值设定项的子类添加所需属性?

标签 oop swift generics swift-extensions

这是场景。我有三个类:ABCA 类是 B 的子类。类C 需要将其实例变量之一传递给类A(我们称之为b)。我想确保它在 C 初始化 A 时发生,以确保我不会遇到 b 为零的任何情况。 AB 的结构如下:

class B {
  var a: Type1

  required init(a: Type) {
    ...
  }
}

class A : B {
  var b: Type2
  ...
}

Swift 规则规定,必须在初始化时定义非可选或隐式解包的变量。但是,由于我必须实现 B 的 init(我无法控制 B;由 Apple 提供),因此我无法保证这一点,因为我无法向 A 的初始化程序添加额外的参数。

我想确保使用 A(b)A(a,b) 调用 A,而不是 A(a) code>,以确保 b 已初始化。我尝试寻找解决方案或考虑使用协议(protocol)或扩展的解决方案,但我无法弄清楚。我得到答案的结束是通过this答案,但它并没有真正达到我想要的效果。

所以我有两个问题(一个使另一个无效): 1. [显而易见的] 这个问题有解决办法吗? (我是否遗漏了一些非常明显的东西?) 2.我的做法是错误的吗?我应该使用不同的模式吗?

谢谢!

最佳答案

如果我正确理解了这个问题,这应该有效:

class B {
    var a: Type1

    init(a: Type1) {
        self.a = a
    }
}

class A : B {
    var b: Type2

    init(a: Type1, b: Type2) {
        self.b = b
        super.init(a: a)
    }
}

关于oop - 如何向必须实现所需初始值设定项的子类添加所需属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27465614/

相关文章:

oop - 名称中包含 "Manager"的类型 - 重构的候选对象?

ios - 查看其他 ViewController 后,用户输入数据不会保留

haskell - 从 generics-sop 的 ConstructorInfo 中提取嵌套类型信息

C# 泛型类型参数跨类共享

haskell - 为什么 zip 在参数计数方面不是通用的?

oop - 这个设计模式的名字是什么?

python - 为什么描述符(在Python中)不能插入(放置)到已经初始化的对象中?

python - 项目的多重继承与组合的讨论(+其他事情)

ios - 向上滚动时带有 UIStackView 的 UITableViewCell 的动态高度问题

ios - 如何处理从另一个应用程序发送到我自己的 iOS 应用程序的 'Open in...' 文件?