在单独的 class 中使用 func() 需要拥有该方法的 class 的实例

Using func() in seperate class requires instance of the class that owns the method

抱歉,如果这是一个愚蠢的问题,但是当我尝试在另一个 class 中使用一个函数时,它需要一个拥有它的 class 的实例。

class Economy {

    let configuration = NSUserDefaults.standardUserDefaults()

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

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

当我在 setBalance 方法中使用 getBalance() 方法时它工作正常但是当我用它来定义一个不在方法中的变量或在另一个方法中使用它时 class 我必须做: getBalance(自我:经济) 而不仅仅是 getBalance()

我不确定这是问题还是什么,但我该如何解决?

从您的评论看来,您似乎根本不想要 class(具有不同的实例):"I just want a way to be able to use the methods"。这在 classes 中并不常见 - 通常,一个 class 实例拥有自己独特的状态信息。但是,在您的情况下,所有 个实例将保持相同的状态(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")
}

注意,这些在任何 class 之外。然后你只要说

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

另请注意,这些不一定是函数。你同样可以有效地说

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

在这种情况下

balance = 15
print("\(balance") // prints 15