2017-10-16 16 views
-3

でサブクラスを作成します - personスーパークラスとSuperPersonサブクラス:swift3:私は2クラス持っているクラス名

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にはSuperPersonではないPerson型があることを意味します。 (クラス名によるクラス検出) –

+0

このコードはクラスを作成しません。私は結局インスタンスを作成するために 'superPerson.init()'のようなものを呼び出すと仮定します?これは可能ですが、それを 'Person'にキャストしているので、' power'プロパティがあることをコンパイラが知る方法はありません。とにかくそれをやろうとしているのかどうかはわかりません。私は、「スーパーパーソンを...」の後のコードがどのようなものか想像するのは困っている。 –

答えて

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:このコードは、SWIFT 4で書かれている、Xcodeの9

+0

'SuperPerSon'と' S'が大文字で入力されていると推測しています。 – LinusGeffarth

+0

私はクラス名でcretaeクラスを欲しいです、私はどのクラスが使用されるのかわかりません、それはclassNameで検出します –