Swift вложенный тип в функции инициализации - PullRequest
0 голосов
/ 26 октября 2018

У меня есть объект вложенного типа, описывающий некоторую структуру:

class Car {
   class Electro {
       class 2WheelDrive {
       }
       class 4WheelDrive {
       }
   }
}

Я хочу использовать этот объект в качестве параметра в функции init другого объекта, подпись которого выглядит следующим образом:

init(car: Car)

Однако, когда я пытаюсь вызвать эту функцию инициализации с аргументом Car.Electro.4WheelDrive, я получаю сообщение об ошибке:

"не может преобразовать значение типа 'Car.Electro.4WheelDrive' в ожидаемый тип аргумента 'Car '".

Какую сигнатуру функции инициализации, кроме init(car: Any), использовать, чтобы иметь возможность использовать такие аргументы, как Car.Electro.4WheelDrive?

1 Ответ

0 голосов
/ 26 октября 2018

Ваш код создает четыре класса:

  • Car
  • Car.Electro
  • Car.Electro.2WheelDrive (я не думаю, что это законно; оно должно начинаться с буквы)
  • Car.Electro.4WheelDrive

Это не связанные классы; единственное, что у них общего, - это пространство имен. Car.Electro не является подклассом Car. Если вы хотите, чтобы это было, вы должны объявить это.

Вы, вероятно, не хотели делать это вложенными вообще. Вы, вероятно, хотели сделать их подклассами:

class Car {}
class ElectroCar: Car {}
class TwoWheelDriveElectroCar: ElectroCar {}
class FourWheelDriveElectroCar: ElectroCar {}

Если вы хотите, вы все равно можете их вложить:

class Car {
   class Electro: Car {
       class TwoWheelDrive: Electro {
       }
       class FourWheelDrive: Electro {
       }
   }
}

Это просто меняет их имена, а не их отношения.

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