Для калькулятора в Swift - PullRequest
0 голосов
/ 12 июня 2018

Просто хочу предупредить вас, я новичок в стремительности, и я все еще привыкаю к ​​тому, как это работает.Я пытался работать над этим проектом калькулятора для класса.Проблема в том, что мне нужно попрактиковаться в упрощении кода.

Прямо сейчас, когда нажата цифровая кнопка, она сохраняется в таком массиве, как этот.

@IBAction func buttonPressed(_ sender: UIButton) {
    if numBtnPressed == true {
    numArray.append(sender.title(for: .normal)!)
    }
 }

, поэтому, если кнопка помеченаПри нажатии 1 сохраняется ["1"] как строка в пустом массиве numArray

У меня есть отдельная структура для операторов на случай, если она мне понадобится.

struct calcFuncs {
  var add : String
  var subtract : String
  var divide : String
  var multiply : String
}
  var calc = calcFuncs(add: "+", subtract: "-", divide: "/", multiply: "x")

Япытаясь выяснить, как получить строку чисел и операторов (например, 1 + 2 x 3 + 4/5 + 5) и заставить компилятор сохранить этот расчет, а затем распечатать его при нажатии равенства.Я знаю, что должен найти способ выполнить вычисления, хотя сейчас все в порядке.Я хочу, чтобы он напечатал готовую строку на этикетке.

Я застрял в том, как извлечь элементы из массива и сделать так, чтобы оператор появлялся между ними в зависимости от того, какой оператор был нажат.(«[1] (оператор) [2] (оператор) [3] (оператор)») и пусть он напечатает сумму.

Я думал что-то подобное, но я знаю, что это утомительно и, вероятно, выиграл 't работа:

  for 0...1 in index:
      [0] something [1]
      1...2 in index:
      etc etc

Я знаю, это звучит безумно, но я изо всех сил пытаюсь сказать компьютеру, что я хочу (вычислить строку чисел при нажатии этих кнопок, сохранить итоговое значение, а затем напечатать итоговое значение при равенствеи вставим это в чистый код.

Любой совет, даже если это означает изменение всего моего кода, приветствуется.

1 Ответ

0 голосов
/ 12 июня 2018

У вас есть хорошие идеи, но, возможно, есть более простой способ.В этом примере используется свойство тега кнопок, которые вы можете установить в Интерфейсном Разработчике, и класс NSExpression для оценки математики.Есть много других способов сделать это.

Это будет следовать стандартному порядку операций (например, умножение и деление перед сложением и вычитанием).

import UIKit

var calculationString = "" // Declare this outside method in view controller

@IBAction func buttonPressed(_ sender: UIButton) {
    // Use the tag property of buttons which can be set in Interface Builder
    // Number buttons can have tag values 0-9
    // Operator buttons can have higher tag numbers (10: "+", 11: "-", 12: "*" 13: "/")
    // Decimal point button tag (14)
    // Calculate or equals button tag (15)
    // Check for tag number

    switch sender.tag {
    case 0...9:
        // Numbers
        calculationString.append(String(sender.tag))
    case 10:
        // Add
        calculationString.append("+")
    case 11:
        // Subtract
        calculationString.append("-")
    case 12:
        // Multiply
        calculationString.append("*") // Need to use asterisk for multiply
    case 13:
        // Divide
        calculationString.append("/")
    case 14:
        // Decimal
        calculationString.append(".")
    case 15:
        // Perform calculation
        let expression = NSExpression(format: calculationString)
        let result = expression.expressionValue(with: nil, context: nil) ?? 0
        yourLabel.text = "Result: \(result)" // Or do whatever you need with the result.
    default:
        fatalError("Unknown button tag")
    }
    yourLabel.text = calculationString // Display user input if desired
}
...