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

相关文章
|
开发框架 前端开发 Android开发
Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势
本文深入探讨了 Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势。这对于实现高效的跨平台移动应用开发具有重要指导意义。
1183 4
|
6月前
|
iOS开发
Cisco Catalyst 9800 Wireless Controller, IOS XE Release 17.17.1 ED - 思科无线控制器系统软件
Cisco Catalyst 9800 Wireless Controller, IOS XE Release 17.17.1 ED - 思科无线控制器系统软件
212 9
Cisco Catalyst 9800 Wireless Controller, IOS XE Release 17.17.1 ED - 思科无线控制器系统软件
|
设计模式 安全 Swift
探索iOS开发:打造你的第一个天气应用
【9月更文挑战第36天】在这篇文章中,我们将一起踏上iOS开发的旅程,从零开始构建一个简单的天气应用。文章将通过通俗易懂的语言,引导你理解iOS开发的基本概念,掌握Swift语言的核心语法,并逐步实现一个具有实际功能的天气应用。我们将遵循“学中做,做中学”的原则,让理论知识和实践操作紧密结合,确保学习过程既高效又有趣。无论你是编程新手还是希望拓展技能的开发者,这篇文章都将为你打开一扇通往iOS开发世界的大门。
|
8月前
|
iOS开发 开发者 Windows
uniapp云打包ios应用证书的获取方法,生成指南
打包用到的一共两个文件,一个是p12格式的私钥证书,一个是证书profile文件。其中生成p12证书的时候,按照官网的教程,是需要MAC电脑来协助做的,主要是生成一些csr文件和导出p12证书等。其实这些步骤也可以借助一些其他的工具来实现,不一定使用mac电脑,用windows电脑也可以创建。
1115 0
|
安全 数据处理 Swift
深入探索iOS开发中的Swift语言特性
本文旨在为开发者提供对Swift语言在iOS平台开发的深度理解,涵盖从基础语法到高级特性的全面分析。通过具体案例和代码示例,揭示Swift如何简化编程过程、提高代码效率,并促进iOS应用的创新。文章不仅适合初学者作为入门指南,也适合有经验的开发者深化对Swift语言的认识。
317 9
|
JSON 数据处理 Swift
Swift 中的网络编程,主要介绍了 URLSession 和 Alamofire 两大框架的特点、用法及实际应用
本文深入探讨了 Swift 中的网络编程,主要介绍了 URLSession 和 Alamofire 两大框架的特点、用法及实际应用。URLSession 由苹果提供,支持底层网络控制;Alamofire 则是在 URLSession 基础上增加了更简洁的接口和功能扩展。文章通过具体案例对比了两者的使用方法,帮助开发者根据需求选择合适的网络编程工具。
298 3
|
安全 开发工具 Swift
Swift 是苹果公司开发的现代编程语言,具备高效、安全、简洁的特点,支持类型推断、闭包、泛型等特性,广泛应用于苹果各平台及服务器端开发
Swift 是苹果公司开发的现代编程语言,具备高效、安全、简洁的特点,支持类型推断、闭包、泛型等特性,广泛应用于苹果各平台及服务器端开发。基础语法涵盖变量、常量、数据类型、运算符、控制流等,高级特性包括函数、闭包、类、结构体、协议和泛型。
364 2
|
安全 Swift iOS开发
Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法
本文深入探讨了 Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法。Swift 以其简洁、高效和类型安全的特点,结合 UIKit 丰富的组件和功能,为开发者提供了强大的工具。文章从 Swift 的语法优势、类型安全、编程模型以及与 UIKit 的集成,到 UIKit 的主要组件和功能,再到构建界面的实践技巧和实际案例分析,全面介绍了如何利用这些技术创建高质量的用户界面。
303 2
|
机器学习/深度学习 安全 数据挖掘
Swift语言的应用场景非常广泛
Swift语言的应用场景非常广泛
508 4
|
JSON 前端开发 API
探索iOS开发之旅:打造你的第一个天气应用
【10月更文挑战第36天】在这篇文章中,我们将踏上一段激动人心的旅程,一起构建属于我们自己的iOS天气应用。通过这个实战项目,你将学习到如何从零开始搭建一个iOS应用,掌握基本的用户界面设计、网络请求处理以及数据解析等核心技能。无论你是编程新手还是希望扩展你的iOS开发技能,这个项目都将为你提供宝贵的实践经验。准备好了吗?让我们开始吧!

相关课程

更多