Swift程式設計入門外傳 — 3.0版修訂補充包
--
“Swift程式設計入門”當初撰寫時,Swift 還是1.2版,才一眨眼的功夫它就進化到 3.0 版。彼得潘特別將書中一些需調整的內容整理出來,希望可以幫助大家在閱讀時無痛轉換到 3.0 版。
- 點選Edit -> Emoji & Symbols 打開特殊字元的輸入視窗。
修改p3–4,原本是點選Edit -> Special Characters
- Console (Debug Area) 搬了家,搬到 Playground 視窗的下半部。
修改p3–7,原本Console在視窗右邊的Assistant Editor。
- Swift 3 只有 for in,沒有傳統的 for 迴圈語法。
上圖的 for 語法在 Swift 3 是不支援的。
- Swift 3 不支援 ++ 和 — — 的語法。
可改成以下的寫法:
- 點選迴圈的結果,從右鍵選單可切換顯示 Latest Value(最後結果), Value History(歷次結果的列表)或 Graph(歷次結果的折線圖)。
修改5–14,補充迴圈結果的切換功能。
- 透過字串的 characters 屬性才能存取字串裡的每個字。
修改5–18,原本圖5–30的程式碼會有錯誤。
for char in name {
- do while 變成 repeat while。
修改p5–19,原本圖5–32的程式碼使用 do while 會有錯誤。
- optional 資料在 Playground 右邊的結果顯示區塊,直接顯示包含的內容,不再包含{ Some }。
修改p6–5,原本顯示的結果為{Some 18}。
- function的每個參數都會自動產生同名的外部參數名。
參考上圖的修改,其它書中呼叫 function 的地方,記得都要加上自動產生的外部參數名。
移除 7–4 節: Swift 3 的第一個參數也會自動產生外部參數名。
移除 7–5 節: 不需要加 # ,function的每個參數都會自動產生同名的外部參數名。
- 利用 _ 可消除自動產生的外部參數名。
- 不同的外部參數名即代表不同的 function。
修改p7–13的圖7–27和圖7–28。
- function 的參數不能加 var。
移除p7–16 的圖7–33。
- print 一統江湖,再也沒有 println 生存的空間。
print 預設將列印換行的結果。若不想換行,可利用 terminator 參數傳入空字串,取代原本預設換行的\n。terminator 參數傳入的字串將加在字串的尾巴。若包含 separator 參數,在 separator 之前可傳入多組字串,這些字串最後將組合在一起,被指定的 separator 字串分隔。
修改7–18小節,列印字串的print和println。切記,println已經不能再使用,把它徹徹底底從記憶裡抹去吧。
- 7–19 幫程式碼分類的標記語法
新版的 playground 看不到標記,不過在專案裡還是看得到的。
- 移除 7–20 節,Swift 3 沒有curried function。
- 想將字串轉換為整數,需使用Int的initialiser。
此 initialiser 將回傳 optional 的 Int,當傳入的參數為非整數的字串時,將回傳 nil。
修改11–9,字串的toInt( )方法已被移除,不能再呼叫。
- 將2個 array 相加的方法從 extend 變成append(contentsOf:)。
修改p13–4,原來將2個array相加的方法是extend,現在變成 append(contentsOf:)。不過其實高手只打一個字,一個 + 就可以相加array。
- 插入成員在 array 特定位置的 function 改成 insert(_:at:) 。
修改 p13–5的圖13–10。
- array 移除成員的 function 變成 remove(at:) 和 removeSubrange(_:)。
修改 p13–7 的圖13–13。
- 以同樣內容初始 array 的 function 變成 init(repeating:count:)。
修改 p13–9 的圖13–18。
- 反轉 array 的 function reversed 和 reverse 。
修改 p13–9 的圖13–20。function reversed 回傳反轉後的 array,原本的 array 不受影響。function reverse 將原本的 array 反轉,不回傳任何東西。
- dictionary 移除成員的 function 變成 removeValue(forKey:)。
修改 p13–13 的圖13–28。
- 14–2 節的強制轉型從 as 變成 as!。
改成用 as! 強制轉型,比方圖14–6改成如上圖所示。
- 在 protocol 裡宣告 optional 的方法屬性時,protocol 和 方法屬性前都要加上 @objc 。
修改 p15–7 的圖15–10。
- id 變成 Any,NSArray 變成 [Any],NSDictionary 變成 [AnyHashable : Any]。
修改 p18–8。
- iOS SDK 的 function 在 Swift 3 有所改變。
修改 p18–8 的圖18–10,Swift 版變成 application(_:didFinishLaunchingWithOptions:)。
修改 p18–9 的圖18–11,Swift 版變成 performSegue(withIdentifier:sender:)。
- iOS SDK enum 型別裡的 case 改成開頭小寫。
修改 p18–12 的圖18–15。
- RawOptionSetType 改成 OptionSet。
修改 p18–14 的圖18–17。
- selector 語法調整。
修改 p18–14 的 selector 的使用。
- Swift 3 可以呼叫 performSelector(inBackground:with:) 和 perform(_:with:afterDelay:)。
修改 p18–15 的 performSelector 的替代方案。
- 附錄A的Swift Standard Library,map, reduce, filter, stride, sort和sorted function,都不能再被當成獨立的global function呼叫。
- 修改A-1,A-2,A-3,A-5,在 Swift 3 沒有 map,reduce,filter ,sort,sorted 的 global function。
- 修改A-4,stride語法調整。