2017-10-16 94 views
-3

子類,我有2個班 - 一個person超類和SuperPerson子類:swift3:創建通過類名

class person { 
    var name: String  
    var age : Int 
    func instance(){} 
} 

class SuperPerson : Person { 
var power : Int 
} 

我有className = "SuperPerson",我使用的代碼:

let superPerson = NSClassFromString(className) as? Person.Type 

嘗試創建一個SuperPerson的實例,但該實例不具有可變權力 - 它確實具有年齡和名稱,但

Ca有人建議我去哪裏錯了?

+1

請覈實,該代碼完全匹配你的。大寫在Swift中很重要。 'person'與'Person'不同,'SuperPerson'與SuperPerSon不同。 (這些應該是'Person'和'SuperPerson'。)也不清楚你用'superPerson'做什麼。你爲什麼說它「有年齡,名字?」你怎麼知道這件事的? –

+0

我的意思是,當我用該代碼創建類時,變量superPerson具有類型Person not SuperPerson。 (按類名檢測類) –

+0

此代碼不創建類。我最終假設你調用類似'superPerson.init()'來創建一個實例?雖然這是可能的,但是你已經將它轉換爲Person,所以編譯器無法知道它具有「power」屬性。但是,我不清楚你是如何試圖這樣做的。我很難想象'let superPerson ...'後面的代碼是什麼樣的。 –

回答

0

您的代碼應該是這樣的:

class Person { 
    var name: String = "" 
    var age : Int = 0 
    func instance(){} 
    } 

    class SuperPerSon : Person { 
    var power : Int = 0 
    } 

現在initialiton應該是這樣的

let superPerson = SuperPerSon() 

然後檢查它的所有屬性的姓名,年齡,力量。

0

你misconnecting有關對象鑄造,你下鑄造類,然後努力的訪問屬性SuperPerSon,我已經在你的代碼校正請參考下面的代碼。

class Person { 
    var name: String? 
    var age : Int? 
    func instance(){} 

    init() { 

    } 
} 

class SuperPerSon : Person { 
    var power : Int? 

    override init() { 
     super.init() 
    } 
} 

    //let className = "SuperPerson" 
    //let superPerson = NSClassFromString(className) as? Person.Type :this was your old line 

//Corrected new line is 
let superPerson = SuperPerSon() 
superPerson.power = 10 

print(superPerson.power) 

PS:此代碼是寫在迅速4時,Xcode 9

+0

我猜''SuperPerSon'都帶'S'大寫是一個錯字。 – LinusGeffarth

+0

我想通過classname的cretae類,我不知道什麼類將被使用,它通過className –