2016-03-29 51 views
0

我跟着一個Swift教程,其中我們編寫了一個名爲DragImg的UIImageView的子類,並且在該子類中覆蓋了一些函數,即touchesBegan,touchesMoved和touchesEnded。在swift中聲明子類對象爲超類,但對象仍然表現爲子類

然後,我進入身份檢查員,查看我想要應用子類的圖像,並將該類更改爲DragImg,然後將它們連接到ViewController.swift作爲插座。

然而,在我ViewController.swift文件我聲明他們作爲一個UIImageView對象即

@IBOutlet weak var HeartImg: UIImageView! 

,而不是

@IBOutlet weak var HeartImg: DragImg! 

即使我沒有改變這一點,圖像仍然充當根據我們在子類中寫的函數定義。

我不知道爲什麼這仍然工作,因爲我認爲超類無法訪問子類的功能。這是否意味着上述聲明在很大程度上是多餘的,唯一有所作爲的是改變身份檢查員的階級?

有人可以解釋這個嗎?

回答

2

這是正確的,因爲您在識別檢查器中使用了DragImg,這實際上是創建實例時使用的類。即使你在你的UIViewController中使用了UIImageView,它仍然是DragImg對象實例。如果你想擁有UIImageView,那麼將標識Inspector改回到UIImageView。

0

當你創建一個子類時,你正在定義一個「是 - 一個」關係。你的子類DragImg是(或者我應該說是is-a)UIImageView。你應該能夠在代碼中的任何地方將它稱爲UIImageView,因爲它是一個。

讓你的插座參考班級的超類非常好。

相關問題