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。