gpt4 book ai didi

Swift - 枚举返回错误的值类型

转载 作者:搜寻专家 更新时间:2023-10-31 19:34:56 24 4
gpt4 key购买 nike

我在使用以下代码时遇到问题:

private enum Op : Printable {
case Operand(Double)
case Constant(String, Double)
case Variable(String)
case UnaryOperation(String, Double -> Double)
case BinaryOperation(String, (Double, Double) -> Double)
var description: String {
get {
switch self {
case .Operand(let operand):
return "\(operand)"
case .Constant(let constant, _):
return constant
case .Variable(let variable):
return variable
case .UnaryOperation(let symbol, _):
return symbol
case .BinaryOperation(let symbol, _):
return symbol
}
}
}
}

private var knownOps = [String:Op]()

init() {
func learnOp(op: Op) {
knownOps[op.description] = op
}
learnOp(Op.Constant("π", M_PI))
learnOp(Op.UnaryOperation("√", sqrt))
learnOp(Op.UnaryOperation("sin", sin))
learnOp(Op.UnaryOperation("cos", cos))
learnOp(Op.UnaryOperation("±") { -1 * $0 })
learnOp(Op.BinaryOperation("×", *))
learnOp(Op.BinaryOperation("÷") { $1 / $0 })
learnOp(Op.BinaryOperation("+", +))
learnOp(Op.BinaryOperation("-") { $1 - $0 })
}

在 init() 完成后,字典 knownOps 包含以下内容:

knownOps    [String : Calculator.CalculatorModel.Op]    9 key/value pairs   
[0] _DictionaryElement<String, Calculator.CalculatorModel.Op>
key String "×"
value Calculator.CalculatorModel.Op Operand Operand
[1] _DictionaryElement<String, Calculator.CalculatorModel.Op>
key String "+"
value Calculator.CalculatorModel.Op Operand Operand
[2] _DictionaryElement<String, Calculator.CalculatorModel.Op>
key String "÷"
value Calculator.CalculatorModel.Op Operand Operand
[3] _DictionaryElement<String, Calculator.CalculatorModel.Op>
key String "π"
value Calculator.CalculatorModel.Op Constant Constant
[4] _DictionaryElement<String, Calculator.CalculatorModel.Op>
key String "-"
value Calculator.CalculatorModel.Op Operand Operand
[5] _DictionaryElement<String, Calculator.CalculatorModel.Op>
key String "±"
value Calculator.CalculatorModel.Op UnaryOperation UnaryOperation
[6] _DictionaryElement<String, Calculator.CalculatorModel.Op>
key String "sin"
value Calculator.CalculatorModel.Op UnaryOperation UnaryOperation
[7] _DictionaryElement<String, Calculator.CalculatorModel.Op>
key String "√"
value Calculator.CalculatorModel.Op UnaryOperation UnaryOperation
[8] _DictionaryElement<String, Calculator.CalculatorModel.Op>
key String "cos"
value Calculator.CalculatorModel.Op UnaryOperation UnaryOperation

我的问题是:为什么 binaryOperation 在字典中被捕获为 Operand

最佳答案

我将以下变量添加到您的枚举中:

var type: String {
get {
switch self {
case .Operand:
return "Operand"
case .Constant:
return "Constant"
case .Variable:
return "Variable"
case .UnaryOperation:
return "UnaryOperation"
case .BinaryOperation:
return "BinaryOperation"
}
}
}

然后使用以下代码循环遍历字典:

for (key, value) in knownOps
{
let valueType = value.type
println("\(key) : \(valueType)")
}

这给了我输出:

× : BinaryOperation
+ : BinaryOperation
÷ : BinaryOperation
π : Constant
- : BinaryOperation
± : UniaryOperation
sin : UniaryOperation
√ : UniaryOperation
cos : UniaryOperation

所以我想您的问题的答案是事实并非如此。我无法回答为什么调试器或您用来检查值的任何东西不正确,但您发布的代码没有错。

关于Swift - 枚举返回错误的值类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31435599/

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