有没有一种方法可以在不同条件下将两个不同类的对象传递到一个变量中

时间:2019-05-31 13:20:07

标签: swift

我有两个language的类,要在运行时在不同条件下使用。

我想根据条件在一个变量中获得两个类的对象。但是,我遇到了错误。

var constantCL = LanguageEnglish()
if languageType == Constants.LoginParameters.LANGUAGE_CODE_ENGLISH {
    constantCL = LanguageEnglish()
} else {
    constantCL = LanguageHindi()
}

在我的constantCL = LanguageHindi()中的else上遇到此错误:

  

不能将类型为“ LanguageHindi”的值分配为类型为“ LanguageEnglish”

错误截图:

Please check the screenshot for more clarification:

1 个答案:

答案 0 :(得分:2)

这是一种预期的行为,因为您的语言是一门实际的课,而不是更加灵活的语言。

可能的解决方案:

为您的语言使用超类,例如

class LanguageEnglish: Language { }
class LanguageHindi: Language { }

var constantCL: Language = LanguageEnglish()

改为使用协议,并在您的语言类中实现该协议(与上面几乎相同,不同之处在于实现和声明):

class LanguageEnglish: Language { }
class LanguageHindi: Language { }

var constantCL: Language = LanguageEnglish()

或者使用枚举表示您的语言,或者在满足您需要的情况下,采用类似的更优雅的构造:

enum Language {
    case english
    case hindi

    // Other useful stuff
}

var constantCL: Language = .english
constantCL = .hindi