Translate

2017年5月8日 星期一

Swift & xcode 學習歷程 part6 - nil 和 optional



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  的方法。