gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 10:15:57 29 4
gpt4 key购买 nike

我正在学习斯坦福 iOS 类(class),我有一个问题,我认为与最近的更新有关。这是代码部分:

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

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

编辑当在 Playground 中输入此内容时,我仍然收到错误,但在我的 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)
}
}
}

最佳答案

我刚刚检查了它是否隐式复制了数组。不,不是的。我认为你的 xCode 有错误。请重新启动 xCode 并重试。转到实用工具栏,将光标移动到代码中的 ops 数组上。作为一种类型,你观察到什么? “错误类型” 还是其他什么?您还可以通过按 opt 并单击变量来检查这一点。

关于swift - 最近 Swift 更新中关于变异结构的变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29945671/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com