Есть ли способ передать объект двух разных классов в одну переменную в разных условиях - PullRequest
0 голосов
/ 31 мая 2019

У меня есть два класса для 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 Ответ

2 голосов
/ 31 мая 2019

Это ожидаемое поведение, поскольку ваш язык является реальным классом, а не чем-то более гибким.

Возможные решения:

Используйте суперкласс для ваших языков, например

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

var constantCL: Language = LanguageEnglish()

Вместо этого используйте протокол и внедрите его в свои языковые классы (почти то же, что и выше, разница в реализации и объявлении):

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

var constantCL: Language = LanguageEnglish()

Или, может быть, используйте enum для представления ваших языков или подобную более элегантную конструкцию, если она соответствует вашим потребностям:

enum Language {
    case english
    case hindi

    // Other useful stuff
}

var constantCL: Language = .english
constantCL = .hindi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...