2016-06-24 20 views
0

私はインスタンスメソッド迅速

class TestClass { 

    class func classMethod(){ 

     print("how do i call instance method from here") 

    } 

    func instanceMethod(){ 

     print("call this instance method") 

    } 


} 

その中にクラスTestClassをし、クラス&インスタンスメソッドを持っている私の質問は、私はclassMethodからinstanceMethodことを呼んで行う方法です??私が気づいた

一つの方法は、

class func classMethod(){ 

    TestClass().instanceMethod() 

} 

である。しかし、これを行うには良い方法ですか?

答えて

5

は、設計の観点から、任意の意味があります。

定義により、instance methodはオブジェクトのinstanceで動作します。 たとえば、一部のインスタンスメンバーにアクセスする必要があるか、またはメソッドと呼ばれるオブジェクトの状態に何らかの形で干渉している可能性があります。一方、インスタンスはそれらを呼び出すことを必要とせず、一般に、与えられたパラメータに対してのみ動作し、共有状態に依存しないでください。なぜそれがまたclass方法、または(グローバル)純粋関数ではありません -

あなたはclassMethod()instanceMethod()を呼び出す必要がある場合

、および instanceMethod()はどのような状態を必要としないのですか?

0

インスタンスメソッドを呼び出すには、TestClassのインスタンスが必要です。 TestClass().instanceMethod()に電話すると、TestClass()が届きます。

あなたが特定のインスタンスからそれを呼び出したい場合は、クラスの関数のパラメータとしてそれを渡すことができます。class func classMethodUsingInstance(instance: TestClass)

あなたがinstanceMethod()のための特定のインスタンスを必要としない場合は、多分それことを検討クラスのメソッドも同様です。

0

あなたはクラスメソッドのパラメータとしてインスタンスオブジェクトを渡し、そのオブジェクトのインスタンスメソッドを呼び出すことができます。あなたはめったに行わないしようとしている何

class TestClass { 

    class func classMethod(obj:TestClass){ 

     print("how do i call instance method from here") 
     obj.instanceMethod() 
    } 

    func instanceMethod(){ 

     print("call this instance method") 
    } 
} 
+1

この時点で、クラスメソッドはインスタンスメソッドにすることもできます – Alexander