Stanford CS193p iOS開發(fā) 課堂作業(yè)(1)

在進(jìn)行了第一課Logistics,iOS8 Overview.和第二課More Xcode and Swift,MVC.兩課的學(xué)習(xí)后有了第一次的課堂作業(yè),要求完善計算器DEMO的功能.

基本要求

  • 實現(xiàn)自動布局
  • 實現(xiàn)小數(shù)點"."的按鍵功能
  • 實現(xiàn)"sin","cos","π"的運算
  • 創(chuàng)建歷史記錄框
  • 添加清除按鈕"C"

額外要求

  • 實現(xiàn)退回鍵功能
  • 添加等號"="
  • 添加正負(fù)轉(zhuǎn)換按鈕"+/-"
  • 優(yōu)化界面

2015年11月30日

實現(xiàn)了"sin","cos","π"的運算

  • "sin","cos"可直接通過之前"√"運算的方法實現(xiàn)
  • "π"的運算方法則需改寫下preformOperation方法來實現(xiàn),具體見下面preformOperation3的方法,和case "π" :performOperation3(M_PI)
    @IBAction func operate(sender: UIButton) { //創(chuàng)建運算符操作方法
        let operation = sender.currentTitle!  //識別運算符
        if userIsInTheMiddleOfTypingANumber { //可省略一次enter的點擊操作,如不寫這段代碼則是"6  enter  6  enter  X"最后輸出36,有這段則是"6  enter  6  X"
            enter()
        }
        switch operation {  //利用switch語句實現(xiàn)運算符的操作
        case "×" :performOperation {$0 * $1}  //利用閉包簡化代碼
        case "÷" :performOperation {$1 / $0}  //因為$1為倒數(shù)第二個數(shù),$0為最后一個數(shù),故除法和減法要用$1 /- $0  而乘法和加法則不必考慮順序
        case "+" :performOperation {$0 + $1}
        case "?" :performOperation {$1 - $0}
        case "√" :performOperation2 {sqrt($0)}
        case "sin" :performOperation2 {sin($0)}
        case "cos" :performOperation2 {cos($0)}
        case "π" :performOperation3(M_PI)
        default: break
        }
    }

    func performOperation(operation: (Double,Double) -> Double) {
        if operandStack.count >= 2 {
            displayValue = operation(operandStack.removeLast(), operandStack.removeLast()) //獲取了倒數(shù)第一個和倒數(shù)第二個數(shù),并使其出棧
            enter()
        }
    }
    
    func performOperation2 (operation: Double -> Double) {
        if operandStack.count >= 1 {
            displayValue = operation(operandStack.removeLast())
            enter()
        }
    }
    
    func performOperation3(operation: Double) {
        displayValue = operation
        enter()
    }

2015年12月2日

實現(xiàn)了"C"清除按鈕的功能,由于其他功能已暫時的學(xué)習(xí)程度不能完美解決,故先繼續(xù)進(jìn)行下一步的學(xué)習(xí),之后再實現(xiàn)未完成的功能

  • 先拖一個button,創(chuàng)建Action事件
  • 解決思路為:1.清空運算棧. 2.使display:Label復(fù)原 3.設(shè)置用戶是否在輸入為false
    @IBAction func clearButton(sender: UIButton) {
        operandStack.removeAll()
        display.text = "0"
        userIsInTheMiddleOfTypingANumber = false
    }

2015年12月3日

實現(xiàn)"←"刪除按鈕的功能

  • 解決思路:先判斷用戶是否已經(jīng)輸入(display.text?.characters.count > 0 or == 0),如果大于零,則去掉最后一位(display.text = String((display.text!).characters.dropLast())),如果未輸入則默認(rèn)數(shù)字為0(display.text = "0"),最后讓userIsInTheMiddleOfTypingANumber = false
    //實現(xiàn)刪除按鈕
    @IBAction func backSpace(sender: UIButton) {
        if display.text?.characters.count > 0 {
            display.text = String((display.text!).characters.dropLast())
        }
        if display.text?.characters.count == 0 {
            display.text = "0"
            userIsInTheMiddleOfTypingANumber = false
            
        }
    }

實現(xiàn)"+/?"正負(fù)按鈕轉(zhuǎn)換功能

  • 解決思路:
    1.此功能不僅要在label上顯示,并將其入棧,而且要作為運算方法,實現(xiàn)棧中的正負(fù)號轉(zhuǎn)換.
    2.實現(xiàn)label中的現(xiàn)實可通過創(chuàng)建方法實現(xiàn),先判斷是否有"-"負(fù)號,如沒有,則在前面添加,如有則刪除.
if display.text!.hasPrefix("?") {
            display.text?.removeAtIndex(display.text!.startIndex)
        } else {
            display.text = "?" + display.text!
        }

3.實現(xiàn)棧中的正負(fù)號改變則需增加運算方法,在func operate()中先判斷是否點擊了"+/?"button,如點擊,實現(xiàn)changeDisplaySign(),再在switch中加入case "+/?" :performOperation2 { -$0 }
代碼如下:

    @IBAction func operate(sender: UIButton) { //創(chuàng)建運算符操作方法
        let operation = sender.currentTitle!  //識別運算符
        if userIsInTheMiddleOfTypingANumber { //可省略一次enter的點擊操作,如不寫這段代碼則是"6  enter  6  enter  X"最后輸出36,有這段則是"6  enter  6  X"
            if operation == "+/?" {
                changeDisplatSign()
                return
            }
            enter()
        }
        switch operation {  //利用switch語句實現(xiàn)運算符的操作
        case "×" :performOperation {$0 * $1}  //利用閉包簡化代碼
        case "÷" :performOperation {$1 / $0}  //因為$1為倒數(shù)第二個數(shù),$0為最后一個數(shù),故除法和減法要用$1 /- $0  而乘法和加法則不必考慮順序
        case "+" :performOperation {$0 + $1}
        case "?" :performOperation {$1 - $0}
        case "√" :performOperation2 {sqrt($0)}
        case "sin" :performOperation2 {sin($0)}
        case "cos" :performOperation2 {cos($0)}
        case "π" :performOperation3(M_PI)
        case "+/?" :performOperation2 { -$0 }
        default: break
        }
    }
    func performOperation2 (operation: Double -> Double) {
        if operandStack.count >= 1 {
            displayValue = operation(operandStack.removeLast())
            enter()
        }
    }

    //實現(xiàn)正負(fù)轉(zhuǎn)換按鈕功能
    func changeDisplatSign() {
        if display.text!.hasPrefix("?") {
            display.text?.removeAtIndex(display.text!.startIndex)
        } else {
            display.text = "?" + display.text!
        }
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末瞎颗,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子绕娘,更是在濱河造成了極大的恐慌锯七,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件翩伪,死亡現(xiàn)場離奇詭異微猖,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)缘屹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進(jìn)店門凛剥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人轻姿,你說我怎么就攤上這事犁珠。” “怎么了互亮?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵犁享,是天一觀的道長。 經(jīng)常有香客問我豹休,道長炊昆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任威根,我火速辦了婚禮凤巨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘洛搀。我一直安慰自己敢茁,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布留美。 她就那樣靜靜地躺著彰檬,像睡著了一般。 火紅的嫁衣襯著肌膚如雪独榴。 梳的紋絲不亂的頭發(fā)上僧叉,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天,我揣著相機(jī)與錄音棺榔,去河邊找鬼瓶堕。 笑死,一個胖子當(dāng)著我的面吹牛症歇,可吹牛的內(nèi)容都是我干的郎笆。 我是一名探鬼主播谭梗,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼宛蚓!你這毒婦竟也來了激捏?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤凄吏,失蹤者是張志新(化名)和其女友劉穎远舅,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體痕钢,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡图柏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了任连。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蚤吹。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖随抠,靈堂內(nèi)的尸體忽然破棺而出裁着,到底是詐尸還是另有隱情,我是刑警寧澤拱她,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布二驰,位于F島的核電站,受9級特大地震影響秉沼,放射性物質(zhì)發(fā)生泄漏诸蚕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一氧猬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧坏瘩,春花似錦盅抚、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至哪自,卻和暖如春丰包,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背壤巷。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工邑彪, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人胧华。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓寄症,卻偏偏與公主長得像宙彪,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子有巧,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,689評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 2014年的蘋果全球開發(fā)者大會(WWDC)释漆,當(dāng)Craig Federighi向全世界宣布“We have new ...
    yeshenlong520閱讀 2,292評論 0 9
  • SwiftDay011.MySwiftimport UIKitprintln("Hello Swift!")var...
    smile麗語閱讀 3,834評論 0 6
  • 關(guān)于斯坦福的這個系列課程的所有筆記,都在這個文集里:Developing Apps for iOS9 一篮迎、MVC ...
    sing_crystal閱讀 395評論 0 0
  • 下午突然收到朋友告知的一個消息 以前相識一校友因失足摔下樓梯不幸去世 其實震驚悲惋之余覺得又夾雜著一絲蒼涼感 生命...
    三徑m閱讀 193評論 0 1
  • “互聯(lián)網(wǎng)行業(yè)薪資真的不高甜橱,真的” 不知道從什么時候開始逊笆,互聯(lián)網(wǎng)悄悄地就火起來了,你會發(fā)現(xiàn)渗鬼,這些年览露,你身邊學(xué)生物的、...
    大樹和幸福閱讀 425評論 0 0