2016-08-16 22 views
1

残念ですが、別のクラスの関数を使用しようとすると、それを所有するクラスのインスタンスが必要です。別クラスでfunc()を使用するには、メソッドを所有するクラスのインスタンスが必要です

class Economy { 

    let configuration = NSUserDefaults.standardUserDefaults() 

    func setBalance(amount: Double) { 
     configuration.setDouble(getBalance(), forKey: "balance") 
    } 

    func getBalance() -> Double { 
     return configuration.doubleForKey("balance") 
    } 
} 

私はsetBalance方法でgetBalance()メソッドを使用する場合、それは正常に動作しますが、私はこの方法ではない変数を定義するか、または別のクラスでそれを使用するためにそれを使用するときに私がしなければならない。 の代わりに のgetBalance()

私はこれが問題であるかどうかわかりませんが、これを修正するにはどうすればよいですか?

+0

サウンドで

var balance: Double { set { let configuration = NSUserDefaults.standardUserDefaults() configuration.setDouble(getBalance(), forKey: "balance") } get { let configuration = NSUserDefaults.standardUserDefaults() return configuration.doubleForKey("balance") } } 

を言うことができますか? – Dravidian

+0

どちらの「経済」のバランスを取っていますか? 「エコノミー」はクラスなので、多くのインスタンス(多くの異なるエコノミー)を持つことができます。 1つしか持てない場合は、クラスをシングルトンにしてください。しかし、まだインスタンスを指定する必要があります。 – Grimxn

+0

私はメソッドを使用できる方法がほしいです。 @Grimxn 私の問題は、関数を正しく使う方法がわからないことだと思います。 私はそれを仮定するのが正しいでしょうか? – OvRdose

答えて

0

あなたのコメントから、実際にクラスを(別々のインスタンスで)欲しがっていないかのように見えます。「メソッドを使用できる方法がほしいだけです」。これはクラスでは普通ではありません。通常、クラスインスタンスには固有の状態情報が保持されます。あなたの場合、すべてのインスタンスは同じ状態(standardUserDefaults)を保持します。

あなたがやりたいことには二つの方法があります - 裸の機能を使用、より簡単に、singletonを使用するか、または:

func setBalance(amount: Double) { 
    let configuration = NSUserDefaults.standardUserDefaults() 
    configuration.setDouble(getBalance(), forKey: "balance") 
} 

func getBalance() -> Double { 
    let configuration = NSUserDefaults.standardUserDefaults() 
    return configuration.doubleForKey("balance") 
} 

ノートは、これらは、任意のクラスの外にあります。それでは、単に

setBalance(15) 
print("\(getBalance()") // prints 15 

と言ってください。また、これらは機能の必要はありません。あなたは均等に有効に右、いただきました問題について、その場合

balance = 15 
print("\(balance") // prints 15 
関連する問題