2016-07-10 1 views
-1

В голове появилась проблема, что происходит, когда я определяю псевдоним типа Swift? Каков механизм этого? Пока я не узнал главу Автоматическое Initializer Наследование от Swift официального документа:Догадка, что механизм псевдонимов типа Swift является автоматическим инициализатором Inheritance

Если подкласс не определяет какой-либо назначенный инициализатору, он автоматически наследует все его суперкласса назначен инициализаторах

А вот мой код практики для обучения

class Vehicle{ 
    var numberOfWheels = 0 
    var description: String { 
     return "\(numberOfWheels) wheel(s)" 
    } 
} 

class Auto: Vehicle{} 

let VM = Auto() 
VM.numberOfWheels 

Wow! это работает, по крайней мере, выполняет, точно так же, как псевдоним типа Swift. Auto является псевдонимом типа Vehicle

Вопрос: Могу ли я правильно понимаю? Это механизм, лежащий в основе псевдонимов типа.

+5

'Авто' не является псевдонимом типа, это подкласс' Vehicle' – vadian

+0

@vadian. Таким образом, псевдоним типа фактически находится на том же уровне исходного класса, который он определил. Но подкласс находится на уровне Sub, он унаследован от суперкласса – SLN

+1

Алиас типа является синонимом, который может использоваться вместо исходного термина, например 'NSTimeInterval' является псевдонимом типа' Double' и может использоваться везде, где Ожидается «Двойной». – vadian

ответ

1

Не совсем, но если вы никогда не видели объектно-ориентированного программирования, они могут выглядеть несколько схожими, я согласен.

Auto является подкласс расширяет исходное транспортное средство и может добавить дополнительные свойства и методы к Vehicle даже если в этом примере он не делает этого.

Auto и Vehicle не то же самое вещь, Vehicle является основным типом и и Auto является одним из его подтипов, что вы можете сделать с Vehicle вы можете сделать с Auto, но не наоборот.

Тип aalias - это всего лишь псевдоним, способ дать и дополнительное «имя» ранее существовавшему типу. Тип и его псевдоним - одно и то же.

+1

«что вы можете сделать с автомобилем, который вы можете делать с помощью Auto, но не наоборот». Какое хорошее объяснение! Спасибо за вашу помощь! – SLN

2

Вопрос: Я правильно понял? Это механизм, лежащий в основе псевдонимов типа.

NO, typealises и subclassing (с наследованием всех методов и инициализаторов) - это разные вещи и основаны на разных семантиках и механизмах.

let v1 = Vehicle() 
v1 is Auto //->false 

typealias Norimono = Vehicle 
v1 is Norimono //->true (with warning "'is' test is always true) 

Последний результат (включая предупреждение, вы можете найти) точно так же, как и v1 is Vehicle.

Typealias - это буквально псевдоним, он дает другое имя для того же типа. более


Один из них, вы можете определить typealias из структур или перечислений, которые вы не можете определить наследственные классы (типы).

+0

Очень хороший пример и дополнительная информация, спасибо большое :) – SLN

Смежные вопросы