Я хочу назначить подкласс ( TapWhatYouHearViewController ), который наследуется от его родительского класса ( BaseLectureViewController ) с реализацией универсальный, используя унаследованный тип ( TapWhatYouHear ), для переменной типа родительский класс ( BaseLectureViewController ) с универсальным типом Базовый класс ( Игра ).
Swift выдает следующую ошибку:
Swift :: Ошибка: невозможно присвоить значение типа «TapWhatYouHearViewController» типу «BaseLectureViewController?»
Я читал, это одно решение, например в Java будет использоваться универсальный шаблон, но в Swift это невозможно. Есть ли другое решение?
Это мои настройки:
/** GAME TYPES **/
enum GameType {
case TapWhatYouHear,
case ChooseTranslation
}
class Game {
var title: String?
var type: GameType?
}
class TapWhatYouHear : Game {
var audio: String?
var type: GameType = GameType.TapWhatYouHear
}
class ChooseTranslation : Game {
var video: String?
var type: GameType = GameType.ChooseTranslation
}
/** VIEW CONTROLLERS **/
class BaseLectureViewController<T: Game> {
var game: T?
}
class TapWhatYouHearViewController : BaseLectureViewController<TapWhatYouHear> {
}
class ChooseTranslationViewController : BaseLectureViewController<ChooseTranslation> {
}
Я хочу сделать следующее:
var game: Game = TapWhatYouHear() // <-- Depending on the user interaction, this can be any sub class of "Game"
var viewController: BaseLectureViewController<Game>
switch game.type {
case .ChooseTranslation:
viewController = TapWhatYouHearViewController() // <--Swift:: Error: cannot assign value of type 'TapWhatYouHearViewController' to type 'BaseLectureViewController<Game>?'
case .TapWhatYouHear:
viewController = ChooseTranslationViewController()
}
viewController.game = TapWhatYouHear()
Что я пытаюсь сделать, это определить во время выполнения, какой подкласс BaseLectureViewController
должен быть назначен переменной viewController
. Чтобы сохранить код, я хочу присвоить игру типа Game
свойству game
BaseLectureViewController
.
.