Я изучаю курс CS193P на iTunesU. У меня есть вопрос, связанный с 1-м заданием - Программируемый калькулятор. Я попытался добавить кнопку π, как описано в лекциях и задании домашней работы. Тем не менее, нажав клавишу П а затем введите или и операнд вызывает сбой с сообщением: «Фатальная ошибка: неожиданно нашел ноль в то время как разворачивание необязательного значения»CS193P Назначение 1 π
class CalculatorBrain
{
private enum Op {
case Operand(Double)
case NullaryOperation(String,() -> Double)
case UnaryOperation(String, Double -> Double)
case BinaryOperation(String, (Double,Double) -> Double)
var description: String{
get {
switch self {
case .Operand(let operand): return "\(operand)"
case .NullaryOperation(let symbol, _): return symbol
case .UnaryOperation(let symbol, _): return symbol
case .BinaryOperation(let symbol,_):return symbol
}
}
}
}
private var opStack = [Op]()
private var knownOps = [String:Op]() //initialize dictionary
init() {
func learnOp (op: Op) {
knownOps[op.description] = op
}
learnOp(Op.BinaryOperation("×", *))
learnOp(Op.BinaryOperation("÷", { $1/$0 }))
learnOp(Op.BinaryOperation("+", +))
learnOp(Op.BinaryOperation("−", { $1 - $0 }))
learnOp(Op.UnaryOperation("√", sqrt))
learnOp(Op.UnaryOperation("sin", sin))
learnOp(Op.UnaryOperation("cos", cos))
learnOp(Op.NullaryOperation("π", { M_PI }))
}
Я был в состоянии заставить он находится в контроллере вида, но знает, что это взломать:
var displayValue: Double{
get{
// I don't understand why I had to put this hack in for π
// if (calcDisplay.text != "π"){
return NSNumberFormatter().numberFromString(calcDisplay.text!)!.doubleValue
// } else {
// return M_PI
// }
}
set{
calcDisplay.text = "\(newValue)"
userIsInTheMiddleOfTyping = false
}
}
Я новичок в Swift/Obj-C. Может кто-нибудь, пожалуйста, помогите указать мне в правильном направлении, чтобы решить это?
Полный источник: https://github.com/philnewman/Calculator
Как я понимаю, на дисплее калькулятора будет указано «3.1415926 ...», когда вы нажимаете 'π'. Все остальные операции отображают результат (например, 'cos'). 'π' работает одинаково. Это операция, которая выводит результат на дисплей. Этот результат - двойной «M_PI». Похоже, ваш дисплей 'π', который' NSNumberFormatter' не может превратиться в 'NSNumber'. – vacawama
Ах! Спасибо @vacawama. Ваш ответ вызвал мысль о проверке viewController. Кнопка π отобразилась в appendDisplay как номер 0-9.Я переделал его, чтобы работать как операторы sin и cos, и теперь он работает правильно. – fil