xcode - 在 Xcode 中使用 swift 更改子类中父类(super class)中的变量

标签 xcode swift inheritance subclass superclass

我有一个名为 Conversion 的父类(super class)和一堆子类,即 Weight。我想要从子类中获取 String 类型的数组并在父类(super class)中使用。我可能在继承部分上有所偏离;无法从子类转到父类(super class)?

但是,为了以防万一,我还是决定问一下。

class Conversion: UIViewController{
var List = [""]
//code that uses variable List
}

class Weight: Conversion{
var List = ["Milligram", "Gram", "Hectogram", "Kilogram", "Ton", "Ounce", "Pound", "Stone"]
//Somehow replace variable List in Conversion superclass 

提前感谢您抽出宝贵的时间。

最佳答案

这里有一些问题。首先,如果您打算在这里尝试使用继承,请不要将这些类绑定(bind)到 Controller 或 MainClass 层次结构中,而是使它们独立,然后在 Controller 中使用它们,或者更好的是,首先在单元测试。

至于继承是否适用于这种情况,当然可以。例如,您可以说转换器可以是特定函数的广义或抽象执行者,并且特定转换需要不同的实现。例如,货币转换器可能需要查阅外部表,而重量转换器只需要数学。隐藏实现细节是面向对象设计的主要目的。

但是,从公共(public)基础派生事物或让它们实现公共(public)协议(protocol)的主要原因是,您可以将不同的事物视为相同。当人们问为什么 Java 中有接口(interface)时,这通常是最好的答案。在 Swift 中,你有协议(protocol)。例如,我很想知道为什么重量和货币转换器会受益于通过通用接口(interface)进行操作。

此外,要使其真正发挥作用,您需要通用性。您在这里显示字符串,但这些确实不是您想要的。任何度量都将是一个值和一个单位。因此,如果我计算体重,它将是一个数字,然后是一个以磅或公斤为单位的天气指标。您可能希望它们是枚举。

最后,如果您希望可以选择使用不同的转换器来执行相同的操作,那么这会有意义。例如,有很多方法可以进行货币兑换。您可以定义一个协议(protocol) CurrencyConverter,然后拥有该协议(protocol)的多个实现,这些实现可以在运行时替换。我们的想法是,您将拥有通过通用协议(protocol)操作转换器的代码,并且可以添加不同的实现,而无需更改使用该组件的任何代码。

关于xcode - 在 Xcode 中使用 swift 更改子类中父类(super class)中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35524750/

相关文章:

swift - 如何用Alamofire(帖子)上传图片?

xcode - Xcode 7.0 中的 zlib

ios - 如何检查滑动是否在堆栈 View 的范围内

c++ - 如何将 Parent* 对象(指向 &Child 对象)插入 vector<Child> 中?

Java:如何使用父类(super class)设计集合

ios - 将应用程序上传到 testflight

swift - 在一个或两个表已经保存后,如何加快表之间的更新关系?

ios - 如何在 swift 中将自定义数组转换为 NSData?

ios - 在 Swift 中运行两次的检查数据和存储数据的代码

javascript - Coffeescript:动态创建调用方法的类的实例