我跟隨斯坦福大學iOS課程,我有一個問題,我相信是與最近更新有關。下面是一段代碼:最近Swift更新關於變異結構的變化?
func evaluate(ops: [Op]) -> (result: Double?,remainingOps: [Op]) {
let op = ops.removeLast() //*I thought ops was immutable?
}
在視頻方面,教師獲得,說你不能這樣做,因爲OPS是不可改變的錯誤。這是完全有道理的,但是當我嘗試輸入時,我不會收到錯誤。這是什麼意思?這是最近一次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)
}
}
}
你使用的是什麼版本的Xcode?我在Xcode 6.3.1上,並且我剛剛嘗試了在Playground中創建Op結構的func,並且我得到以下錯誤:「不可變值類型'[Op]'只有名爲'removeLast'的變異成員'「 – ubersnack
請參閱上面的編輯 –
原來@Salihcyilmaz在下面提出了一個錯誤。我重新啓動Xcode,現在它出現一個錯誤。 –