Swift 访问方法外部的计算属性
我在声明计算属性的类中有一个泛型函数:Swift 访问方法外部的计算属性,swift,Swift,我在声明计算属性的类中有一个泛型函数: class CalculatorBrain { var internalProgram = [AnyObject]() var accumulator: Double = 0.0 var variableValues: Dictionary<String,Double> = [:] func setOperand<T> (operand: T) { if operand is Double { a
class CalculatorBrain {
var internalProgram = [AnyObject]()
var accumulator: Double = 0.0
var variableValues: Dictionary<String,Double> = [:]
func setOperand<T> (operand: T) {
if operand is Double {
accumulator = operand as! Double
internalProgram.append(operand as AnyObject)
}
else if variableName == operand as? String {
var dictionaryValue: Double? {
get {
return variableValues[variableName!]
}
set {
accumulator = newValue!
internalProgram.append(newValue! as AnyObject)
}
}
}
}
显然我不能,因为dictionaryValue是本地定义的,“CalculatorBrain类型的值没有memeber dictionaryValue”,现在的问题是,如何使计算属性全局化,并从类方法内部对其进行更改?或者,如何从函数外部访问类方法内部定义的计算属性?问题是dictionaryValue不是类的计算属性,它只是SetOperator函数中声明的变量,因此无法从函数外部访问
您应该将其声明为类的存储属性,并在调用SetOperator时对其进行更改。请共享更多代码以了解它。问题是:我在类中的函数中有一个计算属性,我既不能从函数外部访问它,也不能在类中使其全局化。我该怎么办?函数中声明的变量是函数的局部变量,我们不能在函数之外访问它。您可以轻松地在类级别声明计算属性。我能知道函数中的else if条件中的
variableName
是什么吗?我希望对变量所做的更改发生在函数内部(这就是为什么在函数中写入setter),但我也希望在函数外部访问它。SetOperator接受两种操作数,variableName是它接受的字符串操作数的名称,它是一个通过字典给出值的变量。是的,这是完全正确的。但一开始我把它定义为dictionaryValue:Double?在类中,当我从控制器更改它时,SetOperator中的setter没有被调用。好像有两个相互独立的DictionaryValue,一个存储在类中,另一个在方法中计算。显然,函数中不能有getter和setter,因为DictionaryValue需要是类的属性,所以只能在类定义中为其实现自定义getter/setter。但是,如果它是一个存储属性,那么无论如何都不需要getter,您可以直接更改SetOperator中dictionaryValues的值,而不是在SetOperator内部使用setter。因此,如果我都希望在SetOperator内部应用对属性的更改,并访问其外部的属性,我没有办法在方法中声明setter?
private var brain = CalculatorBrain()
@IBAction func setVariableValue(_ sender: UIButton) {
brain.dictionaryValue = displayValue
}