Swift写简易计算器

Posted 文恒

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Swift写简易计算器相关的知识,希望对你有一定的参考价值。

用Swift写一个简单计算器的Demo

实验环境:

Xcode v6.4   & OS X Yosemite 10.10

功能描述:

1、实现加减乘除+根号(结果display为Double型)
2、边界适应:各元素之间的距离固定,且适应手机旋转(Roate)
(学习过程,根据Stanford的Swift课程而写的程序)

代码实现:

//
//  ViewController.swift
//  Calculator
//
//  Created by VincentYau on 4/7/16.
//  Copyright (c) 2016 VincentYau. All rights reserved.
//

import UIKit
class ViewController: UIViewController

    @IBOutlet weak var display: UILabel!

    var userIsInTheMiddleOfTypingANumber:Bool = false
    //用户是否已经输入数字,由于Swift的变量必须负初始值,所以设为false

    @IBAction func appendDigit(sender: UIButton)
        let digit = sender.currentTitle!//直接获取Button的数字

        //若已输入过数字,则直接往display中添加数字,否则直接现实新点击数字,去除原始0的操作
        if userIsInTheMiddleOfTypingANumber
            display.text = display.text! + digit
        else
            display.text = digit
            userIsInTheMiddleOfTypingANumber = true
        
    

    //对数字进行运算
    @IBAction func operate(sender: UIButton) 
        let operation = sender.currentTitle!
        if userIsInTheMiddleOfTypingANumber
            enter()
        
        switch operation
        /*swift算法极为简洁,当调用方法performOperation时,其自动对比方法的参数,而无需在
         *调用方法时写明参数类型,例如,这里的参数$0 与 $1并没有指明类型,而Swift会直接将其适应为
         *方法performOpetation中的Double型
        */
        case "×": performOperation  $0 * $1 
        case "÷": performOperation  $1 / $0 
        case "+": performOperation  $0 + $1 
        case "−": performOperation  $1 - $0 
        case "√": performOperation  sqrt($0) 
        default: break

        
    

    //两个参数进行运算的方法
    func performOperation(operation: (Double,Double) -> Double)
        if operandStack.count >= 2 
            displayValue = operation(operandStack.removeLast(),operandStack.removeLast())
            enter()
        

    

    //一个参数进行运算的方法,Swift支持方法的重载,但Obj-C不允许,这里继承了Obj-C的
    //类UIViewColler,不能重载方法performOperation,故将其变为Private方法
    private func performOperation(operation: Double -> Double)
        if operandStack.count >= 1 
            displayValue = operation(operandStack.removeLast())
            enter()
        

    
    var operandStack = Array<Double>()  

    //若用户点击enter,则将相应数字添加至数组Array中  
    @IBAction func enter() 
        userIsInTheMiddleOfTypingANumber = false
        operandStack.append(displayValue)
        println("operandStack = \\(operandStack)")
    
    var displayValue: Double 
        get
            return NSNumberFormatter().numberFromString(display.text!)!.doubleValue
        
        set
            display.text = "\\(newValue)"
            userIsInTheMiddleOfTypingANumber = false
        
    

注意:

这里容易忽略的是,各元素之间的距离还有元素与边界的距离,设置好后如下:

以上是关于Swift写简易计算器的主要内容,如果未能解决你的问题,请参考以下文章

帮我写一个简易的strcmp函数(C语言)。

在 Swift 5 中在其自己的初始值中使用的变量

6.Swift协议|扩展|访问权限|异常调试|类型转换|运算函数|ARC|类类型初试化器|值类型初始化器

单片机简易计算器的设计要求用2*8矩阵键盘,程序如下,求大神把下面4*4键盘程序改成2*8的,可追加分数

基于Map的简易记忆化缓存

Java 简易计算器代码(只能整数的简易运算)