《Swift iOS应用开发实战》——3.2Calculator项目中的控制器

    xiaoxiao2023-06-15  187

    本节书摘来自华章计算机《Swift iOS应用开发实战》一书中的第3章,第3.2节,作者:刘铭 著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

    3.2Calculator项目中的控制器

    在Calculator项目中,ViewController.swift文件中所定义的ViewController类就是一个视图控制器,与它关联的视图就是Main.storyboard文件中ViewController场景里面的View,如图3-2所示。如果我们选择故事板中ViewController场景中的控制器,然后按Command+Option+3快捷键切换到标识检视窗,就会看到Custom Class部分的Class被设置为ViewController,它代表与该视图关联的控制器是ViewController.swift中的ViewController类,如图3-3所示。

    本章我们会完成ViewController视图控制器中的全部代码,这些代码用于实现基本的计算功能。在第2章中已经完成了故事板中视图对象的创建。接下来,主要关注控制器和数据模型方面。 3.2.1实现计算器运算符的相关代码Calculator项目可以实现简单的加、减、乘、除运算,因为与数字按钮的实现功能不同,所以我们需要单独为这些运算按钮创建IBAction方法。但是,在此之前我们还需要对第2章的两个方法稍加改动。步骤1修改ViewController类中的buttonTap方法如下面这样:

    @IBAction func buttonTap(sender: UIButton) { // labelResult中默认显示0,如果开始输入数字,则先清除0 if labelResult.text == "0" || (isSecond && secondOperand == 0.0) { labelResult.text = "" } // 将用户录入的数添加到labelResult中 labelResult.text = labelResult.text! + sender.titleLabel!.text! if isSecond { secondOperand = NSString(string:labelResult.text!).doubleValue }else { // 将labelResult中的字符串转化为双精度数 firstOperand = NSString(string:labelResult.text!).doubleValue } }

    修改了buttonTap方法以后,它可以根据isSecond变量来区分用户输入的是第一操作数还是第二操作数。步骤2修改ViewController类中的decimalPointTap方法如下面这样:

    @IBAction func decimalPointTap() { // 如果没有输入小数点则执行下面的操作 if !decimalPointFlag { labelResult.text = labelResult.text! + "." if isSecond { secondOperand = NSString(string:labelResult.text!).doubleValue }else { firstOperand = NSString(string:labelResult.text!).doubleValue } decimalPointFlag = !decimalPointFlag } }

    步骤3在项目导航中选中Main.storyboard,然后将编辑区切换到助手编辑器模式,为ViewController场景中的加号按钮添加方法名为:operatorTap的IBAction方法。步骤4在弹出的关联设置面板中,Connection设置为Action,Name设置为operatorTap,Type设置为UIButton,Event设置为Touch Up Inside,Arguments设置为Sender,如图3-4所示。

    步骤5为operatorTap方法添加下面的代码:

    @IBAction func operatorTap(sender: UIButton) { if firstOperand != 0 { isSecond = true decimalPointFlag = false switch sender.titleLabel!.text!{ case "+": operatorFlag = "+" case "-": operatorFlag = "-" case "?: operatorFlag = "*" case "?: operatorFlag = "/" default: operatorFlag = "" } } }

    首先,operatorTap方法会让isSecond的值为真,代表用户后面再输入的数值是给第二操作数的,与此同时还会将decimalPointFlag的值设置为假。然后该方法根据用户点击的操作符来设置operatorFlag的值。步骤6在助手编辑器模式下,将减号与operatorTap方法进行IBAction关联。在减号上按住鼠标右键,拖曳至ViewController类的operatorTap方法上面即可。以此类推,再将乘号和除号与operatorTap方法进行IBAction关联。 3.2.2实现计算结果的相关代码接下来我们将为等号(=)按钮建立IBAction关联,该方法的主要功能就是当用户点击等号按钮以后,使用操作符计算两个操作数的结果。步骤7在项目导航中选中Main.storyboard,然后将编辑区切换到助手编辑模式,为ViewController场景中的等号按钮添加方法名为:resultTap的IBAction方法。步骤8在弹出的设置面板中,Connection设置为Action,Name设置为resultTap,Type设置为UIButton,Event设置为Touch Up Inside,Arguments设置为None。步骤9为resultTap方法添加下面的代码:

    @IBAction func resultTap() { // 确保第二操作数有值 if isSecond { // 除数不能为0 if operatorFlag == "/" && secondOperand == 0{ println("Error:除数不能为0.") return } var result: Double = 0.0 switch operatorFlag { case "+": result = firstOperand + secondOperand case "-": result = firstOperand - secondOperand case "*": result = firstOperand * secondOperand case "/": result = firstOperand / secondOperand default: result = 0.0 } labelResult.text = result.description println("第一操作数:\(firstOperand)") println("操作符:\(operatorFlag)") println("第二操作数:\(secondOperand)") println("结果:\(result)") } }

    步骤10再为ViewController场景中的AC按钮添加IBAction方法。Connection设置为Action,Name设置为clear,Type设置为UIButton,Event设置为Touch Up Inside,Arguments设置为None。步骤11为clear方法添加下面的代码:

    @IBAction func clear() { labelResult.text = "0" // Label对象显示0 firstOperand = 0.0 // 第一操作数清零 secondOperand = 0.0 // 第二操作数清零 decimalPointFlag = false // 小数点标记设置为假 isSecond = false // 第二操作数标记设置为假 operatorFlag = "" // 操作符清空 }

    当用户点击AC按钮以后,clear方法会将ViewController中所有的实例变量进行重置,便于重新计算。构建并运行应用程序,此时你可以使用这个计算器进行简单的运算。

    最新回复(0)