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

简介:

本节书摘来自华章计算机《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所示。

image

本章我们会完成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所示。


image


步骤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中所有的实例变量进行重置,便于重新计算。
构建并运行应用程序,此时你可以使用这个计算器进行简单的运算。

相关文章
|
1月前
|
设计模式 安全 Swift
探索iOS开发:打造你的第一个天气应用
【9月更文挑战第36天】在这篇文章中,我们将一起踏上iOS开发的旅程,从零开始构建一个简单的天气应用。文章将通过通俗易懂的语言,引导你理解iOS开发的基本概念,掌握Swift语言的核心语法,并逐步实现一个具有实际功能的天气应用。我们将遵循“学中做,做中学”的原则,让理论知识和实践操作紧密结合,确保学习过程既高效又有趣。无论你是编程新手还是希望拓展技能的开发者,这篇文章都将为你打开一扇通往iOS开发世界的大门。
|
1月前
|
搜索推荐 IDE API
打造个性化天气应用:iOS开发之旅
【9月更文挑战第35天】在这篇文章中,我们将一起踏上iOS开发的旅程,通过创建一个个性化的天气应用来探索Swift编程语言的魅力和iOS平台的强大功能。无论你是编程新手还是希望扩展你的技能集,这个项目都将为你提供实战经验,帮助你理解从构思到实现一个应用的全过程。让我们开始吧,构建你自己的天气应用,探索更多可能!
64 1
|
10天前
|
安全 数据处理 Swift
深入探索iOS开发中的Swift语言特性
本文旨在为开发者提供对Swift语言在iOS平台开发的深度理解,涵盖从基础语法到高级特性的全面分析。通过具体案例和代码示例,揭示Swift如何简化编程过程、提高代码效率,并促进iOS应用的创新。文章不仅适合初学者作为入门指南,也适合有经验的开发者深化对Swift语言的认识。
31 9
|
8天前
|
机器学习/深度学习 安全 数据挖掘
Swift语言的应用场景非常广泛
Swift语言的应用场景非常广泛
19 4
|
10天前
|
JSON 前端开发 API
探索iOS开发之旅:打造你的第一个天气应用
【10月更文挑战第36天】在这篇文章中,我们将踏上一段激动人心的旅程,一起构建属于我们自己的iOS天气应用。通过这个实战项目,你将学习到如何从零开始搭建一个iOS应用,掌握基本的用户界面设计、网络请求处理以及数据解析等核心技能。无论你是编程新手还是希望扩展你的iOS开发技能,这个项目都将为你提供宝贵的实践经验。准备好了吗?让我们开始吧!
|
19天前
|
Swift iOS开发 UED
如何使用Swift和UIKit在iOS应用中实现自定义按钮动画
本文通过一个具体案例,介绍如何使用Swift和UIKit在iOS应用中实现自定义按钮动画。当用户点击按钮时,按钮将从圆形变为椭圆形,颜色从蓝色渐变到绿色;释放按钮时,动画以相反方式恢复。通过UIView的动画方法和弹簧动画效果,实现平滑自然的过渡。
36 1
|
23天前
|
安全 API Swift
探索iOS开发中的Swift语言之美
【10月更文挑战第23天】在数字时代的浪潮中,iOS开发如同一艘航船,而Swift语言则是推动这艘船前进的风帆。本文将带你领略Swift的独特魅力,从语法到设计哲学,再到实际应用案例,我们将一步步深入这个现代编程语言的世界。你将发现,Swift不仅仅是一种编程语言,它是苹果生态系统中的一个创新工具,它让iOS开发变得更加高效、安全和有趣。让我们一起启航,探索Swift的奥秘,感受编程的乐趣。
|
28天前
|
Swift iOS开发 UED
如何使用Swift和UIKit在iOS应用中实现自定义按钮动画
【10月更文挑战第18天】本文通过一个具体案例,介绍如何使用Swift和UIKit在iOS应用中实现自定义按钮动画。当用户按下按钮时,按钮将从圆形变为椭圆形并从蓝色渐变为绿色;释放按钮时,动画恢复原状。通过UIView的动画方法和弹簧动画效果,实现平滑自然的动画过渡。
49 5
|
1月前
|
安全 Swift iOS开发
探索iOS开发中的Swift语言之美
在数字时代的浪潮中,移动应用已成为日常生活的延伸。本文将深入探讨iOS平台上的Swift编程语言,揭示其背后的设计哲学、语法特性以及如何利用Swift进行高效开发。我们将通过实际代码示例,展示Swift语言的强大功能和优雅简洁的编程风格,引导读者理解并运用Swift解决实际问题。
|
2月前
|
存储 IDE 开发工具
移动应用开发之旅:打造你的首个iOS应用
【9月更文挑战第23天】在数字化浪潮中,移动应用已成为连接用户与数字世界的关键桥梁。本文将带领读者踏上开发属于自己的第一个iOS移动应用的旅程,从理解移动操作系统的核心概念出发,逐步深入到实际的应用构建过程中。通过简洁明了的语言和具体的代码示例,我们将一起探索如何在苹果的iOS平台上实现一个简单的“待办事项列表”应用,让读者不仅能够学习到编程知识,还能体会到将想法转化为现实产品的成就感。无论你是编程新手还是希望扩展技能的开发者,这篇文章都将为你提供一个实用的指南,帮助你迈出成为移动应用开发者的第一步。