IOS Swift - 从 SDK 实施时从 class 中删除继承的 属性

IOS Swift - Removing a inherited property from a class when implementing from SDK

我正在尝试使用软件开发工具包中的默认布局视图控制器。此默认布局包含通用 UI 的元素,可用于快速部署并仍然允许工具包的全部功能。我正在尝试学习如何排除我从该工具包中提取的 class 的某些成员。我更多的是在概念上试图理解我将如何去做这件事。

假设我正在使用的这个视图控制器 class 有 4 个 class 成员是属性(在其他成员中是方法,其他属性)

Class: DefaultLayoutViewController

属性:

我希望删除(或隐藏、禁用等)bottomViewController 属性,因为它的功能已被我创建的其他 UI 元素所取代。

import SomeSDK    

class MainViewController: DefaultLayoutViewController {

//Code for UI elements I created

}

以上代码从 SDK 的 Class DefaultLayoutViewController 中提取所有元素,并在其上构建我的元素。

这个 属性 在文档中有关于它的信息。

@property (nullable, nonatomic) SDKbottomViewController *bottomViewController

我试图从 MainViewController class 中覆盖,但有人告诉我 'Cannot override with a stored property'。我将如何从我引用的 class 中删除这个继承的 属性?我显然不能简单地从初始 class 中删除 属性,因为我是从 SDK Pod 安装它的。我是 Swift 的新手,一般来说是编码,所以也许我只是在我的研究中没有正确地表达我的问题,并且未能找到一个明显的解决方案并记录在案。如果在我遗漏的任何地方重复此操作,我深表歉意。

subclass 无法从 superclass 中删除 属性。这违反了“继承”的含义。我们通常将其称为 Liskov Substitution Principle。关于如何(甚至if)这个原则适用有各种微妙之处,但大多数程序员应用这个的方式是在任何可以使用 DefaultLayoutViewController 的地方,要求 MainViewController 也可以使用。考虑这个函数:

func handleController(controller: DefaultLayoutViewController) {
    doSomething(with: controller.bottomViewController)
}

如果这是使用 MainViewController 的实例调用的,在您“删除”bottomViewController 之后应该发生什么?这不是一件有意义的事情。

你应该如何处理这个取决于你想要达到的目标。通常答案是“不要使用 class 继承;使用协议。”如果您绑定到现有的 class-based 框架,这可能并不容易,但它不会改变继承无法删除 属性 的事实。