最近关于变异结构的Swift更新的变化?

时间:2015-04-29 13:46:32

标签: swift

我正在跟随斯坦福iOS课程,我有一个问题,我认为这与最近的更新有关。以下是代码部分:

func evaluate(ops: [Op]) -> (result: Double?,remainingOps: [Op]) {
    let op = ops.removeLast() //*I thought ops was immutable?         
}

在视频中,教师会收到一条错误消息,指出您无法执行此操作,因为操作是不可变的。这是完全合理的,但是当我尝试输入时,我没有收到错误。这是什么意思?这是最近Swift更新中的一个变化,传递给方法的结构是可变的吗?有任何想法吗?在视频中,教师通过创建一个实例变量来解决问题,该变量是操作的副本,但我不再得到错误,并且想要理解为什么会这样。

编辑在操场上输入这个时我仍然会收到错误但我没有在我的Swift文件中。这里参考的是整个文件到目前为止。有任何想法吗?我只是想了解这里发生了什么:

import Foundation

class CalculatorBrain {

    private enum Op {
        case Operand(Double)
        case UnaryOperation(String,Double -> Double)
        case BinaryOperation(String, (Double,Double) -> Double)
    }

    private var opStack = [Op]()

    private var knownOps = [String:Op]()

    init() {
        knownOps["×"] = Op.BinaryOperation("×",*)
        knownOps["÷"] = Op.BinaryOperation("÷") { $1 / $0 }
        knownOps["+"] = Op.BinaryOperation("+",+)
        knownOps["−"] = Op.BinaryOperation("−") { $1 - $0 }
        knownOps["^"] = Op.BinaryOperation("^") { pow($1,$0) }
        knownOps["√"] = Op.UnaryOperation("√",sqrt)
        knownOps["sin"] = Op.UnaryOperation("sin") { sin($0) }
        knownOps["cos"] = Op.UnaryOperation("cos") { cos($0) }
        knownOps["tan"] = Op.UnaryOperation("tan") { tan($0) }

    }

    func evaluate(ops: [Op]) -> (result: Double?,remainingOps: [Op]) {
        if !ops.isEmpty {
            let op = ops.removeLast()//*Error should appear here but does not

        }
        return (nil,ops)
    }

    func evaluate() -> Double? {

    }

    func pushOperand(operand: Double) {
        opStack.append(Op.Operand(operand))
    }

    func performOperation(symbol: String) {
        if let operation = knownOps[symbol] {
            opStack.append(operation)
        }
    }
}

1 个答案:

答案 0 :(得分:1)

我刚检查过它是否隐式地复制了数组。不,不是的。我想你的xCode是错误的。请重新启动xCode,然后重试。转到实用程序栏,将光标移动到代码中的ops数组上。作为一种类型你观察到什么? "error type"还是其他什么?您也可以按opt进行检查,然后点击变量。