網(wǎng)站首頁 編程語言 正文
用Swift寫一個簡單計算器的Demo,供大家參考,具體內(nèi)容如下
實驗環(huán)境:
Xcode v6.4 ? & OS X Yosemite 10.10
功能描述:
1、實現(xiàn)加減乘除+根號(結(jié)果display為Double型)
2、邊界適應(yīng):各元素之間的距離固定,且適應(yīng)手機旋轉(zhuǎn)(Roate)
(學(xué)習(xí)過程,根據(jù)Stanford的Swift課程而寫的程序)
代碼實現(xiàn):
?
// // ?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 ? ? //用戶是否已經(jīng)輸入數(shù)字,由于Swift的變量必須負初始值,所以設(shè)為false ? ? @IBAction func appendDigit(sender: UIButton){ ? ? ? ? let digit = sender.currentTitle!//直接獲取Button的數(shù)字 ? ? ? ? //若已輸入過數(shù)字,則直接往display中添加數(shù)字,否則直接現(xiàn)實新點擊數(shù)字,去除原始0的操作 ? ? ? ? if userIsInTheMiddleOfTypingANumber{ ? ? ? ? ? ? display.text = display.text! + digit ? ? ? ? }else{ ? ? ? ? ? ? display.text = digit ? ? ? ? ? ? userIsInTheMiddleOfTypingANumber = true ? ? ? ? } ? ? } ? ? //對數(shù)字進行運算 ? ? @IBAction func operate(sender: UIButton) { ? ? ? ? let operation = sender.currentTitle! ? ? ? ? if userIsInTheMiddleOfTypingANumber{ ? ? ? ? ? ? enter() ? ? ? ? } ? ? ? ? switch operation{ ? ? ? ? /*swift算法極為簡潔,當(dāng)調(diào)用方法performOperation時,其自動對比方法的參數(shù),而無需在 ? ? ? ? ?*調(diào)用方法時寫明參數(shù)類型,例如,這里的參數(shù)$0 與 $1并沒有指明類型,而Swift會直接將其適應(yīng)為 ? ? ? ? ?*方法performOpetation中的Double型 ? ? ? ? */ ? ? ? ? case "×": performOperation { $0 * $1 } ? ? ? ? case "÷": performOperation { $1 / $0 } ? ? ? ? case "+": performOperation { $0 + $1 } ? ? ? ? case "?": performOperation { $1 - $0 } ? ? ? ? case "√": performOperation { sqrt($0) } ? ? ? ? default: break ? ? ? ? } ? ? } ? ? //兩個參數(shù)進行運算的方法 ? ? func performOperation(operation: (Double,Double) -> Double){ ? ? ? ? if operandStack.count >= 2 { ? ? ? ? ? ? displayValue = operation(operandStack.removeLast(),operandStack.removeLast()) ? ? ? ? ? ? enter() ? ? ? ? } ? ? } ? ? //一個參數(shù)進行運算的方法,Swift支持方法的重載,但Obj-C不允許,這里繼承了Obj-C的 ? ? //類UIViewColler,不能重載方法performOperation,故將其變?yōu)镻rivate方法 ? ? private func performOperation(operation: Double -> Double){ ? ? ? ? if operandStack.count >= 1 { ? ? ? ? ? ? displayValue = operation(operandStack.removeLast()) ? ? ? ? ? ? enter() ? ? ? ? } ? ? } ? ? var operandStack = Array<Double>() ? ? ? //若用戶點擊enter,則將相應(yīng)數(shù)字添加至數(shù)組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 ? ? ? ? } ? ? } }
注意:
這里容易忽略的是,各元素之間的距離還有元素與邊界的距離,設(shè)置好后如下:
原文鏈接:https://blog.csdn.net/u014491743/article/details/51100312
相關(guān)推薦
- 2022-09-13 Nginx報錯104:Connection?reset?by?peer問題的解決及分析_nginx
- 2022-05-25 <C++>搞明白構(gòu)造函數(shù)和析構(gòu)函數(shù)有這一篇就夠了
- 2024-02-26 IDEA隱藏指定文件/文件夾
- 2023-10-09 Cookie和localStorage存儲的區(qū)別
- 2022-05-03 C#設(shè)計模式之工廠模式_C#教程
- 2022-12-15 C++?boost?scoped_ptr智能指針詳解_C 語言
- 2022-11-15 Apache?Doris的Bitmap索引和BloomFilter索引使用及注意事項_Linux
- 2022-04-17 python使用openpyxl讀取日期并修改excel
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支