2016-03-29 6 views
0

Ich folgte einem Swift-Tutorial, wo wir eine Unterklasse von UIImageView namens DragImg schrieben und innerhalb dieser Unterklasse einige Funktionen übertraten, nämlich touchesBegan, touchsMoved und touchesEnded.Deklaration von Unterklassenobjekt als Oberklasse in swift, aber Objekt verhält sich immer noch als Unterklasse

Ich ging dann in den Identity Inspector für die Bilder, auf die ich die Unterklasse anwenden wollte, und änderte die Klasse in DragImg und dann verknüpfte sie mit ViewController.swift als Steckdose.

jedoch in meiner ViewController.swift Datei, die ich erklärte ihnen als UIImageView Objekt dh

@IBOutlet weak var HeartImg: UIImageView! 

statt

@IBOutlet weak var HeartImg: DragImg! 

Auch wenn ich diese nicht geändert haben, wird das Bild fungierte noch als nach den Definitionen der Funktionen, die wir in der Unterklasse geschrieben haben.

Ich bin nicht sicher, warum das immer noch funktionierte, da ich dachte, Superklassen könnten nicht auf Funktionen von Unterklassen zugreifen. Bedeutet das, dass die obige Deklaration weitgehend überflüssig ist und nur die Klasse im Identity Inspector verändert wurde?

Könnte jemand das bitte erklären?

Antwort

2

Das ist richtig, weil Sie DragImg im identify-Inspektor verwendet haben, der wirklich die Klasse ist, die beim Erstellen der Instanz verwendet wird. Auch wenn Sie UIImageView in Ihrem UIViewController verwendet haben, ist es immer noch als DragImg Objektinstanz. Wenn Sie das UIImageView haben möchten, dann ändern Sie den Inspector für die Identifizierung zurück in UIImageView.

0

Wenn Sie eine Unterklasse erstellen, definieren Sie eine "ist-a" -Beziehung. Ihre Unterklasse DragImg ist eine (oder sollte ich sagen, ist-a) UIImageView. Sie sollten in der Lage sein, es überall in Ihrem Code als UIImageView zu bezeichnen, weil es eins ist.

Haben Sie Ihre Steckdose beziehen sich auf die Klasse der Oberklasse ist völlig in Ordnung.