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
        }
    }
}

註意:

這裡容易忽略的是,各元素之間的距離還有元素與邊界的距離,設置好後如下:

以上就是本文的全部內容,希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。

推薦閱讀: