swift - SwiftUI Calculator 应用程序不进行计算
问题描述
我正在创建 SwiftUI 计算器应用程序并坚持在模拟器中我只是得到带有操作按钮标题的字符串数字的问题。我需要解决这个问题,点击操作按钮,然后点击按钮等于得到计算结果。我会很高兴得到任何帮助。
导入 SwiftUI 导入 UIKit
enum CalcButtons: String {
case zero, one, two, three, four, five, six, seven, eight, nine
case equals, plus, minus, multiply, divide, decimal
case ac, minusPlus, percent, rootExtraction, factorial, tenInExponentiation, numberInExponentiation, deleteOneDigit
var title: String {
switch self {
case .zero: return "0"
case .one: return "1"
case .two: return "2"
case .three: return "3"
case .four: return "4"
case .five: return "5"
case .six: return "6"
case .seven: return "7"
case .eight: return "8"
case .nine: return "9"
case .minusPlus: return "+/-"
case .percent: return "%"
case .divide: return "÷"
case .multiply: return "x"
case .plus: return "+"
case .minus: return "-"
case .equals: return "="
case .decimal: return "."
case .deleteOneDigit: return "←"
case .rootExtraction: return "√x"
case .factorial: return "X!"
case .tenInExponentiation: return "10ª"
case .numberInExponentiation: return "X^10"
default:
return "AC"
}
}
var backgroundButtonsColor: Color {
switch self {
case .zero, .one, .two, .three,.four, .five, .six, .seven, .eight, .nine, .decimal:
return Color(.darkGray)
case .ac, .minusPlus, .percent, .rootExtraction, .factorial, .tenInExponentiation, .numberInExponentiation, .deleteOneDigit:
return Color(.lightGray)
default:
return .orange
}
}
}
class DisplayingActions: ObservableObject {
@Published var display = "0"
@Published var userIsTyping = false
var storedNumber: Double?
var storedAction = false
var displayValue: Double {
get {
return Double(display)!
}
set {
display = String(newValue)
}
}
}
struct ContentView: View {
@EnvironmentObject var actions: DisplayingActions
let buttons: [[CalcButtons]] = [
[.ac, .minusPlus, .percent, .divide, .deleteOneDigit],
[.seven, .eight, .nine, .multiply, .rootExtraction],
[.four, .five, .six, .minus, .numberInExponentiation],
[.one, .two, .three, .plus, .tenInExponentiation],
[.zero, .decimal, .equals, .factorial]]
var body: some View {
ZStack (alignment: .bottom) {
Color.black.edgesIgnoringSafeArea(.all)
VStack(spacing: 3) {
HStack {
Spacer()
Text(actions.display)
.foregroundColor(.white)
.font(.system(size: 62))
}.padding()
ForEach(buttons, id: \.self) { row in
HStack (spacing: 3) {
ForEach(row, id: \.self) {button in
CalculatorButtonsView(button: button)
}
}
}
}.padding(.bottom)
}
}
}
struct CalculatorButtonsView: View {
var button: CalcButtons
@EnvironmentObject var actions: DisplayingActions
var body: some View{
Button(action: {
if self.actions.userIsTyping {
self.actions.display = self.actions.display + self.button.title } else {
self.actions.display = self.button.title
self.actions.userIsTyping = true
}
}) {
Text(button.title)
.font(.system(size: 30))
.frame(width: buttonWidth(button: button), height: (UIScreen.main.bounds.width - 5 * 3 ) / 5)
.foregroundColor(.white)
.background(button.backgroundButtonsColor)
.cornerRadius(buttonWidth(button: button))
}
}
private func buttonWidth(button: CalcButtons) -> CGFloat {
if button == .zero {
return (UIScreen.main.bounds.width - 4 * 3 ) / 4 * 1.6
}
return (UIScreen.main.bounds.width - 5 * 3 ) / 5
}
func performOperation(_ title: CalcButtons){
switch title {
case .rootExtraction:
self.actions.displayValue = sqrt(actions.displayValue)
print (actions.displayValue)
default:
break
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView().environmentObject(DisplayingActions())
}
}
解决方案
推荐阅读
- javascript - 在反应组件中调用函数,没有事件处理程序或道具
- c# - C#:当你离开整个组时,如何在一组对象上鼠标悬停和 MouseLeave 事件
- c++ - (Arduino) 我可以跳过 parseInt() 中的多个字符吗?
- javascript - 油门内的函数调用没有被触发javascript
- sql - 如何在 SQL 中将“2017-11”转换为“2017 年 11 月”
- mongodb - 过滤器展平主从
- javascript - Vue.js - 如果您在 Vue 文件中使用 src="script.js" ,脚本标签内的内容会发生什么?
- wordpress - Woocommerce 创建具有变体的自定义产品类型
- java - 以 java 的 Process.exec 开始的进程总是返回退出代码 0
- android-studio - 当我尝试自定义隐藏密码 kotlin 时需要帮助