2016-07-06 4 views
0

クラスのインスタンスメソッドが自分自身のインスタンスを作成して を作成し、それを配列に追加する必要があります。クラス自身のインスタンスを作成します

私はこの試みた:

var vampireArray: [Vampire] = [] 

class Vampire { 

    func createSelf() { 

     vampireArray.append(Vampire()) 

    } 

} 

を私はなぜ(lldb)

のようなコンソール上の奇妙なエラーに任意のアイデアを得ますか?

+1

私たちにあなたのエラーメッセージを表示する - このコードは、プレイグラウンドで動作するので、あなたの問題は他の場所です。また、あなたが実際に達成しようとしていることを説明する必要があります*、あなたの現在の試みよりも他の解決策を提案することができるかもしれません。 – Moritz

答えて

4

このコードのコンテキストを知らなくても、一般的に、クラスのインスタンスを作成してクラスのスコープ外の配列に追加することは悪い考えです。

createSelf()を元に計画していた場所で、vampireArray.append(Vampire())という行を入れてみてください。

あなたはこのルートに固執したい場合は、それは静的メソッドであるべきとvar vampireArray: [Vampire] = []も静的変数内部クラスでなければなりませんcreateSelf()方法のように思われます。

EDIT:あなたは、カウントにアクセスしたいときはいつでも、次に

class Vampire { 
    static var VampireCount = 0 

    init(){ 
     Vampire.VampireCount += 1 
    } 
} 

:あなたがしたいすべてが吸血鬼の数を追跡している場合

、これは良い解決策になる可能性、ちょうど使用Vampire.VampireCount

+0

アイデアは、ヴァンパイアオブジェクトcreateSelfが別のヴァンパイアオブジェクトが作成されたときです。アレイは吸血鬼を数え続けます。 –

+0

@ManosSerifiosしかし、別のヴァンパイアオブジェクトを作成することはイニシャライザの仕事です。これは 'Vampire()'を使って行います。新しく作成された吸血鬼で何かをしたい場合は、あなたのvampireArrayと同じスコープでそれを行うべきです。配列が単独でカウントされている場合は、おそらく整数に変更する必要があります。 – TheBrownCoder

+0

@ManosSerifios私は可能な解決法を提案するために私の答えを編集しました – TheBrownCoder

関連する問題