[ios開發]寫計算器遇到的問題與一些記錄

2020-10-14 12:00:29

1. 用到的知識點

  1. mvc設計模式
  2. Masonry佈局
  3. 用到了演演算法:棧 來進行計算更加方便(c語言簡易表示式求值)

2.筆記

一、實現表示式求值有兩種方法

  1. 中綴轉字尾
    這篇部落格講解比較好 到底什麼是字尾表示式 又是怎麼轉化的
  2. 直接用中綴表示式進行計算

二、棧的基本思想

在這裡插入圖片描述

按照基本思想 View裡寫每個按鈕 並且使用Masonry進行佈局(應該使用百分比)

  1. 通過觀察計算器按鈕的佈局 發現前四排是一樣的形狀 最後一排0的形狀與其他不同 所以通過迴圈來建立了前四行按鈕 然後再單獨建立3個按鈕即可
  2. 在迴圈建立按鈕中,通過不同的i,j來確定不同的setTitle、顏色和tag值
  3. 每一個的點選事件對應的都是(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等基本資料型別不能直接儲存,需要通過轉換成物件才能加入陣列。所以我們需要匯出其中的陣列時 將需要的陣列元素進行強制轉換然後才能進行加減乘除進行計算
在這裡插入圖片描述
有了此處程式碼,我們進行就可以進行下面這樣強制型別轉換然後進行計算了
在這裡插入圖片描述