Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 访问方法外部的计算属性_Swift - Fatal编程技术网

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

}