2015-10-06 54 views
0

我的父/基類如下:斯威夫特類型轉換爲兒童類

class Base { 
    ... 
} 

另外,具有如下的子類:

class Child: Base { 
    ... 
    func someFunc() { 

    } 
} 

我已經創建的實例父類如下:

let baseObj = Base() 

現在,我想從父對象中調用Child類的方法。所以我有一個像下面的代碼:

let childObj = baseObj as! Child 
childObj.someFunc() 

但是,這是給我運行崩潰象下面這樣:

Could not cast value of type 'PCTests.Base' (0x11c6ad150) to 'PCTests.Child' (0x11c6ab530). 
+0

你的'Child'類是(儘管它的名字)*不是*子類的'Base'。你已經定義了兩個無關的類。我不清楚你想達到什麼目的。 –

+0

@MartinR:對不起,代碼有錯誤。我已經更新了相同的內容。感謝您指點。但我的實際代碼實際上是父類的孩子。 – DShah

回答

4

錯誤說,這一切....你不能強制轉換成父子對象。那不是繼承如何工作。

+0

是的,我知道這不是做到這一點的方法,但請您提供任何替代解決方案來實現這一目標。其中一個解決方案是爲子類創建不同的實例,但如果我有任何其他解決方案,我想避免這種情況。 – DShah

+2

恐怕對象方向編程。爲什麼要這麼做?通過父母子女關係,您不能從父母對象調用子女特定的功能。如果最終出現需要的情況,請坐下來思考應用程序設計。可能是你想要一些其他的設計模式在這裏。 – Abhinav

0

可以實現,通過使子類的對象實際上,你應該保持結構以這種方式,因爲這是基地和子類的核心理念,如果你做以下它應該工作:

let baseObj = Child() 

現在,在基類中,你可以做以下

let childObj = self as! Child 
childObj.someFunc() 

someFunc在子類中定義。

P.S.我很高興澄清它是否對你沒有意義,謝謝