Swifter(第2版):100個Swift 2 開發必備Tip ( 簡體 字) |
作者:王巍 | 類別:1. -> 程式設計 -> 手機程式 -> Swift |
譯者: |
出版社:電子工業出版社 | 3dWoo書號: 43002 詢問書籍請說出此書號!【有庫存】 NT售價: 345 元 |
出版日:11/1/2015 |
頁數:264 |
光碟數:0 |
|
站長推薦: |
印刷:黑白印刷 | 語系: ( 簡體 版 ) |
|
加入購物車 │加到我的最愛 (請先登入會員) |
ISBN:9787121275821 |
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 序 |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證) |
作者序: |
譯者序: |
前言:再版序 時光匆匆,如白駒過隙。在技術革新的路上,毫不夸張地說,時間粒度是以分秒來度量的。對于一個 Apple 平臺的程序員來說,WWDC 14 上我們經歷了一場巨變,那就是 Swift 的橫空出世。Swift 在短時間內就得到了大家的認可,無數對新技術有所追求的開發者已經開始在日常工作中使用這門富有活力的語言。在經過一年多的迭代后,Swift 迎來了一系列的進化和更新,變得更為成熟。自本書第 1 版出版至今,Swift 已經擁有了強大的開發者社區,在 GitHub 和 Stack Overflow 上每天都會有無數關于 Swift 的話題,使用 Swift 的開發者們也總結了很多關于這門語言的最佳實踐。 在 WWDC 15 上,Apple 發布了 Swift 的重大更新,在 Swift 2 中,Apple 確定了面向 Protocol編程的理論,這為開發者們如何更好地使用 Swift 指明了方向。同時,新版本的 Swift 為我們提供了更安全的編碼類型、更優秀的錯誤處理,以及更強大的 extension 等諸多語言特性,這一切都讓我們在使用這門語言時能夠更加得心應手。而更振奮人心的消息則是,Swift 將在年內開源,這必將為這門語言注入新的活力,開拓更為廣闊的空間。在 TIOBE 語言排 行上,Swift 現在也將超過它的前輩和競爭對手——Objective-C,可以說使用 Swift 來開發Cocoa/CocoaTouch 程序已經逐漸成為業界潮流。開始學習和使用 Swift 最好的時機是一年前的 WWDC 14 之時,而次好的時機,就是當下。 本書第 1 版是基于一年前的 Swift 1 的,因為 Swift 本身的劇烈變動,有不少內容在今天看來已經過時。另外,我所在公司的 iOS 團隊已經全面轉向 Swift,我自己的個人項目和開源作品現在也都使用 Swift 進行構建,可以說在這一年內我個人也積累了不少新的經驗,希望能夠通過某種形式分享給大家。因此,這一版中將那些過時內容進行了刪改,同時增加了一些對應 Swift 2 的新內容,其中就包括了這一年來的經驗積累和對 Swift 2 中新特性的一些解 讀。相對于第 1 版,此次將所有示例代碼進行了匯總,并通過 Playground 的方式分發,方便讀者查看和驗證書中內容,同時也是對讀者自行練習和鞏固的一種鼓勵。在經過對全書的重新審視和訂正后,相信這一版的內容會更加切合 Swift 現在的特點,以及將來的發展方向。作為作者,我希望它能成為讀者在學習 Swift 道路上的得力幫手。 最后,感謝電子工業出版社及博文視點公司,正是有了張春雨老師的幫助和鼓勵,才使本書及再版成為可能。 ——王巍,于 2015 年冬
推薦序 《讓雨燕飛翔》 在 2014 年 6 月之前,如果我們在 Google 中輸入“Swift”進行查找,搜到的是美國創作型歌手、大美女泰勒·斯威夫特。今天我們再去做同樣的檢索,搜索結果是一門編程語言,這門編程語言的名字就叫作“Swift”,它的 Logo 是一只極速飛翔的雨燕。 Swift 是 Apple 公司在 2014 年 WWDC 大會上推出的一門新語言,用于在 iOS/OS X 平臺上開發應用程序,之前獨霸這個龐大平臺的語言一直是 Objective-C。可以說 Swift 是我所見過關注度最高的新語言,剛推出即萬眾矚目,媒體和開發者在數天之內對 Swift 進行了集中的報道和討論,英文手冊迅速被翻譯成中文,即使是谷歌 2009 年推出 Go 語言時也沒有如此浩大的聲勢。時至今日,已經有大量的獨立應用是基于 Swift 開發構建的。 2007 年之前,Objective-C 一直是 Apple 自家后院的小眾語言,iOS 移動設備的爆發讓這門語言的普及率獲得了火箭一般的躥升速度,截止到今天,Objective-C 在編程語言排行榜上排名第三,江湖人稱三哥。Apple 一直在不遺余力地優化 Objective-C,包括把 GCC 的編譯鏈替換成 LLVM + GCC,又替換成 LLVM + Clang,做語法簡化、自動引用計數、增加 Blocks 和GCD 多線程異步處理技術……既然已經全盤掌握了 LLVM 和 Clang 技術,為什么不開發一門新語言呢?于是 Swift 語言誕生了。 Swift 的作者是天才的 70 后程序員 Chris Lattner,他同時是 LLVM 項目的主要發起人與作者之一、Clang 編譯器的作者。Chris 畢業的時候正是 Apple 為了編譯器焦頭爛額的時候,因為Apple 之前的軟件產品都依賴于整條 GCC 編譯鏈,而開源界的大爺們并不買 Apple 的賬,他們不愿意專門為了 Apple 公司的需求優化和改進 GCC 代碼,所以 Apple 經過慎重的考慮后將編譯器后端替換為 LLVM,并且把 Chris 招入麾下。Chris 進入了 Apple 之后如魚得水,不 僅大幅度優化和改進 LLVM 以適應 Objective-C 的語法變革和性能要求,同時發起了 Clang項目,旨在全面替換 GCC。這個目標已經實現了,從 OS X 10.9 和 XCode 5 開始,LLVM +GCC 已經被替換成了 LLVM + Clang。 Swift 是 Chris 在 LLVM 和 Clang 之后第三個偉大的項目! Swift是一門博采眾長的現代語言,在設計的過程中,Chris參考了Objective-C、Rust、Haskell、Ruby、Python、C# 等優秀語言的特點,Swift 的語法特性最終形成。Swift 是面向 Cocoa 和Cocoa Touch 的編程語言,編譯型,類型安全,生產環境的代碼都需要 LLVM 編譯成本地代碼才能執行,但是 Swift 又具備很多動態語言的語法特性和交互方式,支持各種高級語言特性,包括閉包、泛型、面向對象、多返回值、可選變量、類型接口、元組、集合等。 很顯然,這是一門準備取代 Objective-C 的編程語言,它將吸引更多的開發者加入蘋果的軟件生態圈,為 iOS 和 OS X 開發出更為豐富的 App。如果你是 App Store 的開發者,推薦盡早學習和掌握這門蘋果力推的新語言。對于大部分新事物來說,越早介入,收獲越大。 Swift 入門并不困難,Apple 公司甚至為這門語言提供了所寫即所得的 Playground 功能,不僅實現了很多腳本語言支持的交互式編程,而且提供控制臺輸出、實時圖形圖像、時間線(timeline)變量跟蹤等功能,開發者除了可以看到代碼的實時運行結果,還能根據時間線閱讀某個變量在代碼片段中值的變化。這真是太棒了!另外,閱讀官方提供的《The SwiftProgramming Language》也是快速入門的途徑,Cocoa 開發者社區甚至在第一時間提供了高 質量的中譯本。 問題的關鍵是入門了之后怎么辦?當你讀完教程學習了語法,自覺成竹在胸拔劍四顧的時候,突然發現 Swift 在實際的項目應用中會出現各種各樣的問題,就像你手持一柄玄鐵重劍,卻無法洞悉劍訣的奧秘。如何讓“雨燕”迅疾地飛翔?這就是《Swifter(第2版):100 個 Swift 2開發必備 Tip》這本書要解決的問題。 本書作者王巍是我非常尊敬的一位iOS開發者,他的網絡ID是“onevcat”,大家都叫他喵神。王巍畢業于清華大學,在校期間就對 iOS 開發一往情深,曾經開發出《小熊推金幣》《PomoDo》等一系列優秀的 iOS 游戲和應用。工作和開發之余,王巍也在參與 iOS 開發社區的建設,比如發起和組織翻譯項目“objc 中國”,開源 Xcode 插件 VVDocumenter 項目等,這本《Swifter:100 個 Swift 開發必備 Tip》同樣是他對社區的貢獻之一。 王巍是一個在技術上對自己有要求的程序員,在涉及的每個領域,他都希望能夠做到庖丁解牛,游刃有余。既能洞悉全局,又可直達細節。王巍 2014 年赴美參加了 Apple 的 WWDC大會。可以說,從 Swift 誕生的那一分鐘起,王巍就開始學習和研究這門語言。他在自己的博文《行走于 Swift 的世界中》闡述了大量 Swift 的語法細節和底層實現機制,并對這篇文章進行了持續的更新,這篇文章在 Swift 社區獲得了巨大的反響。之后,王巍持續學習 Swift語言,并進行了編程實踐和項目實戰,他把自己的學習心得和編程技巧進行了梳理和完善,最終形成了這本《Swifter:100 個 Swift 開發必備 Tip》。書中共有 100 個 Swift 編程技巧,幾乎涵蓋了 Swift 語言的所有細節,每篇獨立成文,可拆可合,讀者可以隨時翻閱,也可以遇到實際問題后再來檢索。 這本書最早的版本是電子書,我在它出版的第一時間就買了來讀,之后隨用隨讀,這本書讓我對 Swift 語言有了更為深入的了解,也解決了我的團隊在開發過程中的很多實際問題。所以,當獲知王巍的這本書要出紙版的時候,我覺得我有責任讓更多的人知道這本書。在目前這樣一個知識版權認知匱乏的年代,優秀的原創作者總是值得尊敬,他們的圖書作品也值得我們珍惜,我希望把這本書推薦給每一個 iOS 開發者,它值得我這么做。 目前王巍旅居日本,就職于即時通信軟件公司 Line。他依然行走在修行的路上,孜孜以求創意之源。祝愿在未來的日子里,王巍能為這個世界呈現更好的軟件產品和技術圖書。落花無言,人淡如菊,書之歲華,其曰可讀。這大概就是王巍目前的寫照。作為開發者,我們要做的就是找到這個領域的燈塔,閱讀、學習,然后Writethecode,Change the world,并期待下一個收獲的季節! 祝大家學得開心! ——池建強 《MacTalk·人生元編程》作者 微信平臺 MacTalk 出品人 2015 年,春
第一版序 雖然我們都希望能盡快開始在 Swift 的世界里遨游,但是我覺得仍然有必要花一些時間對本書的寫作目的和適合哪些讀者進行必要說明。我不喜歡自吹自擂,也無法承擔 “騙子” 的罵名。在知識這件嚴肅的事情上,我并不希望對讀者 產生任何誤導。作為讀者,您一定想要找一本適合自己的書;而作為作者,我也希望找到自己的伯樂和子期。 為什么要寫這本書 中文的科技書太少了,內容也太淺了。這是國內市場尷尬的現狀,真正有技術的大牛不在少數,但他們很多并不太愿意通過出書的方式來分享他們的知識,一方面原因是回報率實在太低,另一方面是出版的流程過于煩瑣。這就導致了市面上充斥著一些習慣于出版業務,但是卻絲毫無視質量和素質的“流氓”作者,以及他們制造的“流水線”圖書。特別是對于 Swift 語言來說,這個問題尤其嚴重。iOS 開發不可謂不火熱,每天都有大量的開發者涌入這個平臺。而 Swift 的發布更使得原本高溫的市場更上一層樓。但是市面上隨處可見的都是各種《××× 開發指南》《××× 權威指南》或者《21 天學會 ×××》式的中文資料。這些圖書大致都是對官方文檔的翻譯,并沒有什么實質的見解,可以說內容單一,索然無味。作為讀者,很難理解作者寫作的重心和目的(其實說實話,大部分情況下這類書的作者自己都不知道寫作的重心和目的是什么),這樣的 “為了出版而出版” 的圖書可以說除了增加世界的熵以外,幾乎毫無價值。 如果想要入門 Swift 語言,閱讀 Apple 官方教程和文檔無論從條理性和權威性來說,都是更好的選擇。而中國的 Cocoa 開發者社區也以令人驚嘆的速度完成了對文檔的高品質翻譯,這在其他任何國家都是讓人眼紅的一件事情。因此,如果您初學程序設計或者 Swift 語言,相比起那些“泯滅良心”(抱歉我用了這個詞,希望大家不要對號入座)的 “入門書籍”,我更推薦您看這份翻譯后的官方文檔 1 ,這是非常珍貴的資源。說到這里,可以談談這本《Swifter:100 個 Swift 開發必備 Tip》的寫作目的了。很多 Swift 的學習者,包括新接觸 Cocoa/Cocoa Touch 開發的朋友,以及之前就使用 Objective-C 的朋友,所面臨的一個共同的問題是,入門以后應該如何進一步提高。也許你也有過這樣的感受:在閱讀完 Apple 的教程后,覺得自己已經學會了 Swift 的語法和使用方式,你滿懷信心地打開 Xcode,新建了一個 Swift 項目,想寫點什么,卻發現實際上不是那么回事。你需要聯想Optional 應該在什么時候使用,你可能發現本已熟知的 API 突然不太確定要怎么表達,你可能遇到怎么也編譯不了的問題但卻不知如何改正。這些現象都非常正常,因為教程是為了展示某個語法點而寫的,而幾乎不涉及實際項目中應該如何使用的范例。本書的目的就是 為廣大已經入門了 Swift 的開發者提供一些參考,以期能迅速提升他們在實踐中的能力。因為這部分的中級內容是我自己力所能及,有自信心能寫好的,也是現在廣大 Swift 學習者所缺乏和急需的。 這本書是什么 本書是 Swift 語言的知識點的集合。我自己是赴美參加了 Apple 的 WWDC 14 的,也正是在這屆開發者大會上,Swift 橫空出世。毫不夸張地說,從 Swift 正式誕生的第一分鐘開始,我就在學習這門語言。雖然天資駑鈍,不得其所,但是在這段集中學習和實踐的時間里,也還算總結了一些心得,而我把這些總結加以整理和示例,以一個個的小技巧和知識點的形式,編寫成了這本書。全書共有 100 節,每一節都是一個相對獨立的主題,涵蓋了一個中高 級開發人員需要知道的 Swift 語言的方方面面。 這本書非常適合用作官方文檔的參考和補充,也會是中級開發人員很喜愛的 Swift 進階讀本。具體每節的內容,可以參看本書的目錄。 這本書不是什么 這本書不是 Swift 的入門教程,也不會通過具體的完整實例引導你用 Swift 開發出一個像是計算器或者記事本這樣的 app。這本書的目的十分純粹,就是探索那些不太被人注意,但是又在每天的開發中可能經常用到的 Swift 特性。這本書并不會系統地介紹 Swift 的語法和特性,因為基于本書的寫作目的和內容特點,采用松散的模式和非線性的組織方式會更加適合。換言之,如果你是想找一本 Swift 從零開始的書,那這本書不應該是你的選擇。你可以在閱讀 Apple 文檔后再考慮回來看這本書。 組織形式和推薦閱讀方式 100 個 Tip 其實不是一個小數目。本書每節的內容是相對獨立的,也就是說你沒有必要從頭開始看,隨手翻開到任何一節都是沒問題的。當然,按順序看是最理想的閱讀方式,因為在寫作時我特別注意了讓靠前的節不涉及后面節的內容;另一方面,位置靠后的節如果涉及之前節的內容的話,我添加了相關節的交叉引用,這可以幫助迅速復習和回顧之前的內容。我始終堅信不斷地重復和鞏固,是真正掌握知識的唯一途徑。您可以通過目錄快速地在不同節之間選擇自己感興趣或需要了解的內容。如果遇到您不感興趣或者已經熟知的節,您也完全可以暫時先跳過去,這不會影響您對本書的閱讀和理解。建議您閱讀本書時開啟 Xcode 環境,并且對每一節中的代碼進行驗證,這有利于您真正理 解代碼示例想表達的意思,也有利于記憶的形成。每一段代碼示例都不太長,卻經過了精心的準備,能很好地說明本節內容,希望您在每一處都能通過代碼和我進行心靈上的 “對話”。 代碼運行環境 書中每一節基本都配有代碼示例的說明。這些代碼一般來說包括 Objective-C 或者 Swift 的代碼。理論上來說所有代碼都可以在 Swift (也就是 Xcode)當前版本環境下運行。當然因為Swift 版本變化很快,可能部分代碼需要微調或者結合一定的上下文環境才能運行,但我相信這種調整是顯而易見的。如果您發現明顯的代碼錯誤和無法運行的情況,歡迎隨時與我聯系,我將盡快修正。 如果沒有特別說明,這些代碼在 Playground 和項目中都應該可以運行,并擁有同樣表現。但是也存在一些代碼只能在 Playground 或者項目文件中才能正確工作的情況,這主要是因為平臺限制的因素,如果出現這種情況,我都會在相關節中特別加以說明。 勘誤和反饋 Swift 仍然在高速發展中,隨著 Swift 的新特性引入及錯誤修正,本書難免會存在部分錯誤或者過時的情況。雖然我會隨著 Swift 的發展繼續不斷完善和修正這本書,但是這個過程亦需要時間。 另外由于作者水平有限,書中也難免會出現一些錯誤或者紕漏,如果您在閱讀時發現了任何問題,可以直接向我反饋,我將盡快確認和修正。 致謝與提醒 首先想感謝您購買了這本書。我其實是懷著忐忑的心情寫下這些文字的,小心翼翼地希望沒有觸動太多人。這本書所提供的知識我想應該是超過它的售價的,但在選擇前還是請您再三考慮。 |
內容簡介:本書基于Swift最新版本Swift 2,是目前僅有的一本基于新版的書籍。Swift的易學難精體現在其實際項目暗坑無數,需要同時具備知識、技巧和經驗的一定儲備,本書試圖讓你快速到達這一境界。本書onevcat親赴WWDC見證Swift發布,是全球第一批研究和實踐者。對Swift的理解和運用,既能洞悉全局,又可直達細節。100個Swift編程技巧,涵蓋方方面面。每個Tip獨立成文,可拆可合,順序閱讀、按需翻閱或應急速查皆宜。面向中高級開發人員,充滿獨到見解,徹底脫離官方文檔,入門者可用來迅速提升實踐能力。 |
目錄:再版序 iii 推薦序 iv 序 vii I Swift 新元素 1 Tip 1. 柯里化 (Currying) 2 Tip 2. 安全的資源組織方式 4 Tip 3. 將 protocol 的方法聲明為 mutating 6 Tip 4. Sequence 7 Tip 5. 多元組(Tuple) 9 Tip 6. @autoclosure 和?? 11 Tip 7. Optional Chaining 14 Tip 8. 操作符 16 Tip 9. func 的參數修飾 19 Tip 10. 字面量轉換 21 Tip 11. 下標 25 Tip 12. 方法嵌套 27 Tip 13. 命名空間 30 Tip 14. Any 和 AnyObject 32 Tip 15. typealias 和泛型接口 35 Tip 16. 可變參數函數 37 Tip 17. 初始化方法順序 39 Tip 18. Designated,Convenience 和 Required 41 Tip 19. 初始化返回 nil 44 Tip 20. protocol 組合 47 Tip 21. static 和 class 51 Tip 22. 多類型和容器 54 Tip 23. default 參數 57 Tip 24. 正則表達式 59 Tip 25. 模式匹配 62 Tip 26. … 和..< 65 Tip 27. AnyClass、元類型和.self 67 Tip 28. 接口和類方法中的 Self 70 Tip 29. 動態類型和多方法 73 Tip 30. 屬性觀察 75 Tip 31. final 78 Tip 32. lazy 修飾符和 lazy 方法 81 Tip 33. Reflection 和 Mirror 84 Tip 34. 隱式解包 Optional 87 Tip 35. 多重 Optional 89 Tip 36. Optional Map 91 Tip 37. Protocol Extension 93 Tip 38. where 和模式匹配 98 Tip 39. indirect 和嵌套 enum 101 II 從 Objective-C/C 到 Swift 103 Tip 40. Selector 104 Tip 41. 實例方法的動態調用 106 Tip 42. 單例 108 Tip 43. 條件編譯 111 Tip 44. 編譯標記 113 Tip 45. @UIApplicationMain 115 Tip 46. @objc 和 dynamic 117 Tip 47. 可選接口和接口擴展 120 Tip 48. 內存管理,weak 和 unowned 122 Tip 49. @autoreleasepool 127 Tip 50. 值類型和引用類型 130 Tip 51. String 還是 NSString 132 Tip 52. UnsafePointer 134 Tip 53. C 指針內存管理 137 Tip 54. COpaquePointer 和 C convention 139 Tip 55. GCD 和延時調用 141 Tip 56. 獲取對象類型 145 Tip 57. 自省 147 Tip 58. KVO 149 Tip 59. 局部 scope 152 Tip 60. 判等 155 Tip 61. 哈希 158 Tip 62. 類簇 160 Tip 63. Swizzle 162 Tip 64. 調用 C 動態庫 165 Tip 65. 輸出格式化 167 Tip 66. Options 169 Tip 67. 數組 enumerate 171 Tip 68. 類型編碼 @encode 173 Tip 69. C 代碼調用和 @asmname 175 Tip 70. sizeof 和 sizeofValue 177 Tip 71. delegate 179 Tip 72. Associated Object 181 Tip 73. Lock 183 Tip 74. Toll-Free Bridging 和 Unmanaged 185 III Swift 與開發環境及一些實踐 189 Tip 75. Swift 命令行工具 190 Tip 76. 隨機數生成 192 Tip 77. print 和 debugPrint 194 Tip 78. 錯誤和異常處理 196 Tip 79. 斷言 203 Tip 80. fatalError 205 Tip 81. 代碼組織和 Framework 208 Tip 82. Playground 延時運行 212 Tip 83. Playground 可視化 214 Tip 84. Playground 與項目協作 216 Tip 85. 數學和數字 218 Tip 86. JSON 220 Tip 87. NSNull 222 Tip 88. 文檔注釋 224 Tip 89. 性能考慮 226 Tip 90. Log 輸出 228 Tip 91. 溢出 230 Tip 92. 宏定義 define 232 Tip 93. 屬性訪問控制 234 Tip 94. Swift 中的測試 236 Tip 95. Core Data 238 Tip 96. 閉包歧義 240 Tip 97. 泛型擴展 244 Tip 98. 兼容性 246 Tip 99. 列舉 enum 類型 248 Tip 100. 尾遞歸 251 后記及致謝 253 |
序: |