Swift程式設計入門外傳 — 3.0版修訂補充包

“Swift程式設計入門”當初撰寫時,Swift 還是1.2版,才一眨眼的功夫它就進化到 3.0 版。彼得潘特別將書中一些需調整的內容整理出來,希望可以幫助大家在閱讀時無痛轉換到 3.0 版。

  • 點選Edit -> Emoji & Symbols 打開特殊字元的輸入視窗。
Image for post
Image for post

修改p3–4,原本是點選Edit -> Special Characters

  • Console (Debug Area) 搬了家,搬到 Playground 視窗的下半部。
Image for post
Image for post

修改p3–7,原本Console在視窗右邊的Assistant Editor。

  • Swift 3 只有 for in,沒有傳統的 for 迴圈語法。
Image for post
Image for post

上圖的 for 語法在 Swift 3 是不支援的。

  • Swift 3 不支援 ++ 和 — — 的語法
Image for post
Image for post

可改成以下的寫法:

Image for post
Image for post
  • 點選迴圈的結果,從右鍵選單可切換顯示 Latest Value(最後結果), Value History(歷次結果的列表)或 Graph(歷次結果的折線圖)。
Image for post
Image for post

修改5–14,補充迴圈結果的切換功能。

  • 透過字串的 characters 屬性才能存取字串裡的每個字。
Image for post
Image for post

修改5–18,原本圖5–30的程式碼會有錯誤。

for char in name {

  • do while 變成 repeat while。
Image for post
Image for post

修改p5–19,原本圖5–32的程式碼使用 do while 會有錯誤。

  • optional 資料在 Playground 右邊的結果顯示區塊,直接顯示包含的內容,不再包含{ Some }。
Image for post
Image for post

修改p6–5,原本顯示的結果為{Some 18}。

  • function的每個參數都會自動產生同名的外部參數名。
Image for post
Image for post

參考上圖的修改,其它書中呼叫 function 的地方,記得都要加上自動產生的外部參數名。

移除 7–4 節: Swift 3 的第一個參數也會自動產生外部參數名。

移除 7–5 節: 不需要加 # ,function的每個參數都會自動產生同名的外部參數名。

  • 利用 _ 可消除自動產生的外部參數名。
Image for post
Image for post
  • 不同的外部參數名即代表不同的 function。
Image for post
Image for post
Image for post
Image for post

修改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 看不到標記,不過在專案裡還是看得到的。
Image for post
Image for post
  • 移除 7–20 節,Swift 3 沒有curried function。
  • 想將字串轉換為整數,需使用Int的initialiser。
Image for post
Image for post

此 initialiser 將回傳 optional 的 Int,當傳入的參數為非整數的字串時,將回傳 nil。

修改11–9,字串的toInt( )方法已被移除,不能再呼叫。

  • 將2個 array 相加的方法從 extend 變成append(contentsOf:)。
Image for post
Image for post

修改p13–4,原來將2個array相加的方法是extend,現在變成 append(contentsOf:)。不過其實高手只打一個字,一個 + 就可以相加array。

  • 插入成員在 array 特定位置的 function 改成 insert(_:at:) 。
Image for post
Image for post

修改 p13–5的圖13–10。

  • array 移除成員的 function 變成 remove(at:) 和 removeSubrange(_:)。
Image for post
Image for post

修改 p13–7 的圖13–13。

  • 以同樣內容初始 array 的 function 變成 init(repeating:count:)。
Image for post
Image for post

修改 p13–9 的圖13–18。

  • 反轉 array 的 function reversed 和 reverse 。
Image for post
Image for post

修改 p13–9 的圖13–20。function reversed 回傳反轉後的 array,原本的 array 不受影響。function reverse 將原本的 array 反轉,不回傳任何東西。

  • dictionary 移除成員的 function 變成 removeValue(forKey:)。
Image for post
Image for post

修改 p13–13 的圖13–28。

  • 14–2 節的強制轉型從 as 變成 as!。
Image for post
Image for post

改成用 as! 強制轉型,比方圖14–6改成如上圖所示。

  • 在 protocol 裡宣告 optional 的方法屬性時,protocol 和 方法屬性前都要加上 @objc 。
Image for post
Image for post

修改 p15–7 的圖15–10。

  • id 變成 Any,NSArray 變成 [Any],NSDictionary 變成 [AnyHashable : Any]。

修改 p18–8。

  • iOS SDK 的 function 在 Swift 3 有所改變。
Image for post
Image for post

修改 p18–8 的圖18–10,Swift 版變成 application(_:didFinishLaunchingWithOptions:)。

Image for post
Image for post

修改 p18–9 的圖18–11,Swift 版變成 performSegue(withIdentifier:sender:)。

  • iOS SDK enum 型別裡的 case 改成開頭小寫。
Image for post
Image for post

修改 p18–12 的圖18–15。

  • RawOptionSetType 改成 OptionSet。
Image for post
Image for post

修改 p18–14 的圖18–17。

  • selector 語法調整。
Image for post
Image for post

修改 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呼叫。
Image for post
Image for post
  • 修改A-1,A-2,A-3,A-5,在 Swift 3 沒有 map,reduce,filter ,sort,sorted 的 global function。
  • 修改A-4,stride語法調整。

參考 Swift 3的 for 迴圈不只會每次加 1

彼得潘的 iOS App Neverland

Written by

彼得潘的iOS App程式設計入門,文組生的iOS App程式設計入門講師,彼得潘的 Swift 程式設計入門,App程式設計入門作者,http://apppeterpan.strikingly.com

彼得潘的 iOS App Neverland

Written by

彼得潘的iOS App程式設計入門,文組生的iOS App程式設計入門講師,彼得潘的 Swift 程式設計入門,App程式設計入門作者,http://apppeterpan.strikingly.com

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch

Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore

Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store