2016-07-30 68 views
1

在我有一個let變量被聲明爲&的變量的基礎類中被初始化的情況下,我被卡住了。我需要在擴展此基類的其他類中的一箇中傳遞不同的枚舉。我們可以在swift中從基類訪問重寫的類函數嗎?

所以,我試圖在基類中創建一個類函數,以便我可以覆蓋並返回一個不同的枚舉類型。但有什麼辦法可以從基類訪問擴展類?

創建了一個示例代碼,說明您:

class A { 

    var string: String { 
     get { 
      // Is it possible to refer to the class type dynamically here ? 
      // So that it would call B's printMessage 
      return A.printMessage("Hello") 
     } 
    } 

    class func printMessage(message: String) -> String { 
     return "You shall not pass !" 
    } 

} 


class B: A { 

    override class func printMessage(message:String) -> String { 
     return message + "World !" 
    } 

} 

let obj = B() 
print(obj.string) 

回答

2

使它像這樣:

var string: String { 
    get { 
     // Is it possible to refer to the class type dynamically here ? 
     // So that it would call B's printMessage 
     return self.dynamicType.printMessage("Hello") 
    } 
} 
+0

我用'A.dynamicType' :(想雖然我不知道是怎麼回事。可能在調用'super.init'之前訪問初始化器中的'self.dynamicType'編譯器總是抱怨在調用'super.ini'前無法訪問'self'但在這種情況下不能訪問? – GoodSp33d

+0

在您的情況下,您不訪問dynamicType在初始化之前,你首先初始化這個對象,然後引用一個計算出來的屬性,然後只是th它訪問dynamicType –

相關問題