1. 用到的知識點
- mvc設計模式
- Masonry布局
- 用到了演算法:堆疊 來進行計算更加方便(c語言簡易運算式求值)
2.筆記
一、實作運算式求值有兩種方法
- 中綴轉后綴
這篇博客講解比較好 到底什么是后綴運算式 又是怎么轉化的 - 直接用中綴運算式進行計算
二、堆疊的基本思想

按斬訓本思想 View里寫每個按鈕 并且使用Masonry進行布局(應該使用百分比)
- 通過觀察計算器按鈕的布局 發現前四排是一樣的形狀 最后一排0的形狀與其他不同 所以通過回圈來建立了前四行按鈕 然后再單獨創建3個按鈕即可
- 在回圈創建按鈕中,通過不同的i,j來確定不同的setTitle、顏色和tag值
- 每一個的點擊事件對應的都是(click:)傳入需要的button 并且通過協議傳值將button傳向View界面 然后在VC中直接呼叫傳遞的方法中的引數button的tag值來確定具體的點擊物件

ViewController中
定義兩個NSMutableString來存放獲取的值, 通過appendString進行不斷附加到兩個NSMutableString中(為什么是兩個?后面會有一個加結束符的操作如果一直用一個 那么這個結束符就保存到陣列中直接輸出了)同樣在viewcontroller中進行獲取時的一些判錯問題以及最后答案洗掉多余0的問題


在一系列判斷結束后 如果按下‘=’那么就將我們獲取的陣列賦值給model的陣列 在model中進行判斷與計算 需要注意在賦值時在最后再添一個井號為輸入結束判斷符以確保輸入結束

在Model中首先需要兩個NSMutableArray型陣列,一個就是運算子的堆疊,一個是數字的堆疊 思想和c直接拿中綴式一樣 不過語言變成了oc 并且沒有用結構體而是用兩個陣列 所以函式也有一定的改變 簡單的入堆疊(通過強制型別轉換強行插入到需要陣列的) 出堆疊(remove最后一個元素) 獲取堆疊頂元素(沒有這個函式 因為可以直接通過陣列的最后一個元素來決定)其他差不多

還有最重要的一塊 NSArray即oc里的陣列,它可以保存不同的物件,但不能保存基本資料型別,int ,char,double等基本資料型別不能直接保存,需要通過轉換成物件才能加入陣列,所以我們需要匯出其中的陣列時 將需要的陣列元素進行強制轉換然后才能進行加減乘除進行計算

有了此處代碼,我們進行就可以進行下面這樣強制型別轉換然后進行計算了

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/172146.html
標籤:其他
下一篇:前端攔截器使用及介紹
