2016-07-10 24 views
-1

Die Frage tauchte in meinem Kopf auf, was passiert, wenn ich einen Alias ​​vom Swift-Typ definiere? Was ist der Mechanismus dahinter? Bis ich die automatische Initializer Inheritance Kapitel aus dem Swift amtliches Dokument gelernt:Eine Vermutung, dass der Alias-Mechanismus des Swift-Typs der automatische Initialisierer ist. Vererbung

Wenn Ihre Unterklasse keine bestimmten Initialisierung nicht definiert, erbt automatisch alle seine Oberklasse bezeichnet initializers

Und hier ist mein Übungscode zum Lernen

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

class Auto: Vehicle{} 

let VM = Auto() 
VM.numberOfWheels 

Wow! Dies funktioniert mindestens genauso wie der Swift-Typ-Alias. Auto ist der Alias ​​des Typs Fahrzeug

Frage: Bin ich es richtig verstanden? Dies ist der Mechanismus hinter dem Typalias.

+5

'Auto' ist kein Typ-Alias, es ist eine Unterklasse von' Vehicle' – vadian

+0

@vadian Also der Typ Alias ​​tatsächlich in der gleichen Ebene der ursprünglichen Klasse, aus der es definiert. Aber Unterklasse ist in der Sub-Ebene, es geerbt von der Super-Klasse – SLN

+1

Ein Typ-Alias ​​ist ein Synonym, das anstelle des ursprünglichen Begriff verwendet werden kann, zum Beispiel 'NSTimeInterval' ist ein Typ Alias ​​von' Double' und kann überall dort verwendet werden 'Double' wird erwartet. – vadian

Antwort

1

Nicht wirklich, aber wenn Sie noch nie objektorientierte Programmierung gesehen haben, könnten sie etwas ähnlich aussehen, ich stimme zu.

Auto ist eine Unterklasse, die das ursprüngliche Fahrzeug erstreckt und zusätzliche Eigenschaften und Verfahren zum Vehicle sogar es nicht tun, wenn in diesem Beispiel hinzufügen könnte.

Auto und Vehicle sind nicht dasselbe, ein Vehicle ist ein Grundtyp und und Auto ist einer seiner Subtypen, was man mit einem Vehicle tun können Sie mit einem Auto aber nicht umgekehrt zu tun.

Ein Typalias ist nur ein Alias ​​, ein Weg zu geben und zusätzliche "Name" zu einem bereits vorhandenen Typ, nur das. Ein Typ und sein Alias ​​sind dasselbe.

+1

"Was Sie mit einem Fahrzeug tun können, können Sie mit einem Auto tun, aber nicht umgekehrt." Was für eine gute Erklärung! Danke für Ihre Hilfe! – SLN

2

Frage: Verstehe ich es richtig? Dies ist der Mechanismus hinter dem Typalias.

Nein, Typisierungen und Unterklassen (mit allen Methoden und Initialisierer erben) sind verschiedene Dinge und basieren auf verschiedenen Semantiken und Mechanismen.

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

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

Das letzte Ergebnis (einschließlich der Warnung Sie finden) ist genau die gleiche wie v1 is Vehicle.

Typalias ist wörtlich ein Alias, es gibt einen anderen Namen für den gleichen Typ.


Eine weitere, können Sie typealias von Strukturen oder Aufzählungen definieren, die Sie nicht geerbten Klassen definieren können (Typen).

+0

Sehr schönes Beispiel und die zusätzlichen Informationen, Vielen Dank :) – SLN