1> Swift 的語言裡面,有大量的驚嘆號。要了解驚嘆號,就要先知道 nil。nil 就是什麼都沒有,即使這個變數是 int,或是 double,他也可以是nil。nil 自己一個型別,獨立的一個。
2> 再看 Optional, 而為了向下相容 objective-c。所以他設定了 Optional。在早期的 obj-c裡面,在一個 function 執行,而他在執行的時候,如果需要回傳某個結果。假設是 int,如果這個程式是算的出來的,他就會回傳結果,但是有時候你會遇到算不出來的時候。此時會回傳 nil,不是回傳其他任何 type。
3> 但 swift 的語言架構,和 obj-c 是不一樣了,所以為了向下相容,所以他創造了一個 data type,叫做 Optional。使用的方式,就是加上問號。這就是相當於一個包裝,把某個變數包在裡面。讓他能出現 nil。
4> 所以當變數在做互相運算的時候,他一定要解開,因為 nil 的運算是有可能讓你的 app 炸掉。而解開的方法,有兩種
4.a> Optional binding, if let {}
或是
4.b> !
舉例來說:
Optional Chaining
UILabel?.text = “123”
這個 UI 是會先被檢查是不是 nil。如果是 nil ,這一行跳過,則不執行。如果己經不是 nil,就會執行。
if let 寫太多,事實上很差,如果你裡面有四個變數,那你就會出現四個 if let,會變成波動拳程式碼。
所以 swift 2.0 有加一個功能。
if let plustNText = plustNfield.text, let n = sth , let m = sth {
//這樣一次就可以解開四個變數
}
5> MVC 一種軟體開發的設計模式 Model, View, Controller.
Model:
軟體中的資料。通訊錄中的聯絡人“Line 的對話紀錄、遊戲裡面的排行榜分數。在我們的計數器裡面,他的變數名是 counter.
View
直接面對使用者
Controller.
負責控制Model和View之間的溝通,管理運算,可以想像成大腦
View Controller
通常控制一整個 App頁面,他是 App頁面的「大腦」
通常會有非常非常多行的code。
真的有必要的時候可以把部分的東西切分出來到獨立的 controller
----溝通方式-----
6> Outlet
Controller 藉由 outlet 來對 view 物件進行動作,所以 outlet 會設定為 controller 的屬性。
Target-action
當 view 物件發生特定事件 (event) 的時候會啟動。
7> 特別注意
AutoLayout & UIStckView
同步與非同步處理> 同步: 馬上程式會跑。 非同步: 按下去後,要等。
MKDirections
8> Auto Layout 一原點是在左上角
(0,0) (w,0)
(0,h) (w,h)
h和w 都是正值
9> Missing constraints > 沒有定義完成會出現的 errMsg
Misplaced views > 運算完的 view 和 實際大小可能不同。
10> 在 iOS9 新增了 UIStackView
在元件欄裡面
事實上還有一個 Vertical Stack View,可以裡面再塞基他的 label 或 slider 或 view。然後,他可以用 Fill 的方式,或是 equally distribution,你還可以用 spacing 去調整。這是一個很快做 layout 的方法。