Swift語言指南
這份指南匯集了Swift語言主流學習資源,并以開發者的視角整理編排。
GitHub: ipader/SwiftGuide | 網站:http://dev.swiftguide.cn | 歡迎開發者一起維護,或反饋/投稿
Swift文檔
1. Welcome to Swift
蘋果針對Swift開發者官方文檔入口。其中包括:Swift概括,Swift Programming Language,Using Swift with Cocoa and Objective-C
2. Swift Programming Language
蘋果官方文檔:在線版(英文)
愛好者翻譯版:在線版(中文) (By @Swift中文翻譯組) |PDF版 (By @CocoaChina) |百度閱讀版 (By 小豈子)
Swift 編程風格指南(譯文來自 swiftist.com): 本風格指南的目標是讓Swift代碼更簡潔、可讀更強。 原文:《The Official raywenderlich.com Swift Style Guide》
- 《The Swift Programming Language》讀簿: "讀書就是要取其精華,去其糟粕、無用、簡單和已知的內容。By @Hawstein"。站在作者自己的理解能力上,應該是一份很好的去繁求簡讀薄。不過,每個初學者基礎不同,理解能力也千差萬別。因此,對于濃縮版,當有不理解時,應該對照原版章節再進一步細讀,千萬不能蒙混。
3. Using Swift with Cocoa and Objective-C
- 蘋果官方文檔:在線版(英文)
- 愛好者翻譯版:在線版(中文) (By @CocoaChina)|PDF版 (By @CocoaChina)
4. 快速入門
- Swift Cheat Sheet(PDF): 形式以代碼先行,極簡、有效地Swift語言快速學習指南
- An Absolute Beginner’s Guide to Swift: 相對于Swift Cheat Sheet帶了不少說明,但整個文檔不顯啰嗦,可讀性強
- Swift Language FAQ: Raywenderlich的Swift語言FAQ說清楚了很多問題。這份FAQ確實淺顯易讀,初學者不可或缺好文章!
- Strings in Swift:了解使用String的更高級技巧(尤其在Unicode的使用上)。文章中作者附上了示列代碼在Playground項目中,似乎Swift開發者們已經慢慢地習慣了結合playground講授Swift使用小技巧及語言特性。
- 與其它語言對比表:C vs. Go vs. Swift,C# vs. Swift,Scala vs. Swift,Go vs. Swift
- Objective-C開發者對Swift亮點的點評: 這篇譯文確實不錯,含括了常見的亮點。盡管對于Swift相較于Objective C的亮點描述還不夠全面,對初學者很受用。原文在此
- 開啟iOS/Mac開發之旅,過來人告訴你16件事 (譯文來自@CocoaChina):"我曾向iOS開發者推薦了《推ter上最值得關注的30個人》,收到了不少開發者的反饋,受此鼓舞,我向知名iOS開發者和設計師詢問了這樣一個問題--回到你開始iOS/Mac app開發的時候,你以現在的角度會給“最初的你”哪些建議。" 譯文來自,英文原文《13 Things You Must Know When Starting Out in iOS/Mac Development》
- 74個Swift標準庫 (譯文): Swift包含了74個內置函數,但在The Swift Programming Langage一書中只介紹了其中的7個,其它的都沒有在文檔中體現。"文中作者沒有提及他是如何發現這么多未在文檔中體現的內置函數的,估計是反編譯的 結果。我測試了好多個都能用,而且Xcode還會給出語法提示:)" by @李潔信
- 馬上著手開發 iOS 應用程序 (Start Developing iOS Apps Today): 來自蘋果官方文檔
5. 相關文檔
- WWDC 2014
- WWDC 2014發布會(帶中文字幕): 有關Swift語言演講部分從103:54開始,首先蘋果iOS/OS X及公共平臺負責人克雷格·費德里吉(Craig Federighi)針對Xcode及Objective C的簡要回顧,克里斯·拉特納(Chris Lattner)上臺做Swift語言演示從107:15開始。
- WWDC 2014 Videos: 需要蘋果開發者帳號才能觀看。
- WWDC 2014 PDFs: 107個PDF壓縮包 By @清醒瘋子
- Chris Lattner (譯文:Swift 編程語言首席架構師): "Chris Lattner(1978年出生)是 LLVM 項目的主要發起人與作者之一,Clang 編譯器的作者。他現在是蘋果公司『開發者工具』部門的主管,領導 Xcode、Instruments 和 編譯器團隊,從 2010 年 7 月開始主導" By 伯樂在線
- 關于Swift,開發者最需要了解的7個方面 (英文原文): 簡明扼要的闡述了Swift語言的幾個重要特點
- 程序員眼中的蘋果Swift語言:簡單 易學 高效:“以下是記者準備的七個問題,涉及Swift的優點、缺點。以及Objective-C的結局。索菲斯的答案中有些會有點駭人、令人震驚,或許還有幾絲傷感。“ 相關參考:知乎《如何評價 Swift 語言?》
- 行走于 Swift 的世界中: 總結了一下近一周以來的一些覺得這個語言里有意思的地方。
- Swift の 函數式編程: "Swift 相比原先的 Objective-C 最重要的優點之一,就是對函數式編程提供了更好的支持。 Swift 提供了更多的語法糖和一些新特性來增強函數式編程的能力,本文就在這方面進行一些討論。" By @diumoo
- Top 5 iOS 7 Animations: iOS 7 排名前5的動畫效果預覽。誰能解讀一下到這些動畫效果對應的程序庫、或找到對應或相近開源代碼分享嗎?(Swift版本更佳,OBJC也可以)
- IFTTT/JazzHands: Flickr開始界面動畫類似效果,OBJC版本實現程序庫。
常用工具
開發工具
- Xcode 6 beta 2: 蘋果應用集成開發環境。支持C/C++, Objective C, Swift等。沒有開發者帳號的在百度網盤(提取碼:va1y)下載。
- Textmate:Mac OS X上一個可高度自定義的編輯器,尤其在我想做出一個快速改變但又不想等待Xcode加載的時候。該工具目前已經開源
- Mou):OS X上一款Markdown的編輯器。非常適用于編寫自述文件、變更日志以及其他方面的內容。作者:羅晨
- Sublime Text ($):Mac OS X上另一款非常受歡迎的輕量級,可高度自定義的編輯器。
代碼管理
- GitHub:聲望日盛的資源分享之地。
- GitHub for Mac:一個設計的非常美觀的git客戶端,不能取代你從命令行獲得的所有功能,但使用起來非常簡單。
- Git:分布式版本控制系統和源碼管理系統,其優點是:快和簡單易用。對于新手來說,可在此查看免費電子書籍。
Xcode插件
- CocoaPods:第三方庫的管理利器,允許你簡單地把第三方庫整合進自己的應用中。對我個人來說,我基本上每個項目都使用CocoaPods。
- CocoaPods Xcode Plugin:一款Xcode插件,允許你直接從Xcode管理CocoaPod依賴。
管理工具
- HomeBrew:OS X上非常出色的包管理工具。
- Transmit ($):一個Mac OS X 上FTP客戶端,有著非常漂亮的用戶界面和有用的功能。
參考文章
- iOS開發工具: "這是我們多篇iOS開發工具系列篇中的一篇,此前的文章比如:那些不能錯過的Xcode插件,iOS開發者有價值的工具集,iOS/OS X開發:各種工具快到碗里來!,App原型設計工具使用心得(上)& App原型設計工具使用心得(下),你用哪種工具進行iOS app自動化功能測試?,iOS 開發者必知的 75 個工具" By @CocoaChina
Swift教程
- 蘋果官方
- nettlep/learn-swift: 學習《Swift Programming Language》的同時,配合運行這些playgrounds,對于快速掌握Swift最合適不過了.
- The Swift Programming Language: Solutions to Experiments (譯文): "讀了它的第一章節“Swift初見(A Swift Tour)”,有各種各樣的試驗需要你去“解決”用來闡述指南中示例的代碼問題。蘋果并沒有給我們提供相關的實際解決方案,所以在此列出了我們想到的一些。"
- Swift Reference Playground/Swift Operators Playground: "Swift Reference is a handy playground file that can be used when you are starting to learn swift.It covers the basic syntax definitions and different ways to use" 初學Swift語言的同學一定先玩玩這個,可以讓您更快感性的了解Swift語言語法、操作符及語言新特點(代碼涵蓋地比較完整)。
- VirtualGS教程 (By @林泰前): 幾十年的老程序員,資深的iOS開發工程師,把自己兒子培養成蘋果應用商店最年少的應用開發者,哪里能找到這樣優質的編程老師? 教程包括《How to》系列連載和《圖形編程》示例項目
- Swift Weather APP: “林永堅老師將帶領大家使用Swift語言開發一個完整的天氣 iOS APP。同時大家能夠學習到Interface Builder、CocoaPods、Core Location、AFNetworking的使用,以及如何通過Swift調用Objective-C組件”
- Developing iOS 8 Apps Using Swift (I) – Animations, Audio, and Custom Table View Cells: "這個教程大概7篇blog,一步步講解了一個『itunes music search app』的制作對于async http, api delegate, 異步圖片,動畫,代碼分層,interface builder都做了清晰的介紹。" By gaohailang
- Replicating 推ter’s bird zoom startup animation (in Swift!) (源代碼): 這是一個有關用Swift開發簡單動畫效果的編程示例,示例開發靈感來源于近期的推ter iOS版小鳥啟動動畫。
- WWDC2014 詳解OSX/iOS8/Swift語言: "極客學院全國首發課程,詳解OSX/iOS8新特性/嶄新編程語言Swift!極客學院團隊通宵錄制、上傳,只為在這一刻把最新最實戰的課程呈現給開發者"
- Swift中的延遲加載(譯文 By @Swiftist): 文章講解步聚清晰。@lazy 很實用的特性:"延遲加載是一種將對象的創建或其它高負荷操作延遲到真正需要時才執行的機制。當為iOS進行編程時,僅在需要時才分配內存,對小內存的手機而言(相對于電腦)非常實用。"
- WWDC14 Session 402 學習筆記 By @糖炒小蝦_txx
- Swift與Objective-C混編高級教程之混編框架的創建和調用
- Swift中下劃線的妙用: "在Swift中,下劃線有很多妙用,這里將已經看到的妙用進行總結,希望可以幫助更多學習Swift的朋友。..." By @twlkyao
- SwiftSingleton: 三種方法介紹了Swift中Singleton的寫法
- LTBouncyPlaceholder代碼解讀: "我希望你已經下載了 LTBouncyPlaceholder 的 Demo ,用 Xcode 6 打開并編譯、運行,然后在界面中顯示的幾個 UITextField 里輸入一些文字來體驗這個擴展。看到 Placeholder 的動畫了嗎?" By nixzhu
- 從零開始學Swift計時器App開發(源代碼): "通過完成此教程,我對Swift語言的理解也更進了一步。Swift是一門全新的語言,作為開發者,我們需要不斷加深對這門語言的理解,并靈活使用語言提供的特性來編程。..." by @李潔信
- 使用 Swift 和 AVOSCloud 構建 iOS 應用:"使用 AVOSCloud SDK 和 Swift 構建 iOS 應用 | AVOS Cloud Blog" By @AVOS江宏 | 這就是業界的速度,先機才是致勝法寶。
Swift項目
1. 實用類庫
以下實用類庫僅做為快速參考,更多實用類庫需求,可以去這里(Swift toolbox is a community-supported catalog of iOS and OSX libraries) (By Adam Leonard from swiftcast.tv), 這個網站收藏了GitHub開源社區中優質Swift資源庫,并提供了分類及查詢服務。
- Dollar: 尤其在Array和Dictionary的支持上(實現類庫僅一個Dollar.swift文件)。用過Javascript版的Lo-Dash或underscore就知道其實用程度。它是一套函數化編程的工具庫。另一個類似的更完整的版本是ExSwift,它的實現基于對象化擴展的。
- ExSwift: 實用類擴展庫。另一個Lo-Dash或underscore的Swift版本實現,相對于Dollar.swift,此版本有更完整的API實現。包括了 對Array, Int, String, Float, Range, Dictionary, NSArray的擴展及其它實用方法。完全遵循面向對象的擴展原則。
- SQLiteDB in Swift: "This is a basic SQLite wrapper for Swift. It is very simple at the moment and does not provide any advanced functionality. Additionally, it's not pure Swift at the moment due to some difficulties in making all of the necessary sqlite C API calls from Swift."
- Minimalistic Swift HTTP request agent for iOS and OS X: 一個簡單、小巧、實用的HTTP請求Swift語言實現類(僅一個Agent.swift類)
- lingoer/SwiftyJSON:這是解析JSON字符串封裝類。實現功能與Javascript中的JSON.parse相近,使用方便。
- lingoer/GRequest:"@李潔信:個人認為AFNetworking這種較重的第三方網絡庫將逐漸淡出舞臺,而像樓主這種基于NSURLSession并充分利用Swift特性寫出來的小而美的庫會受到更多人的青睞!" 作者解讀《GRequest for HTTP Request》。
- lingoer/SwiftWeiboKit: "封裝了整個OAuth2.0的授權流程,并提供了幾個簡便易用的請求方法"
- owensd/json-swift: 功能與Swifty幾乎一致,使用上要更方便。
- A 推ter framework for iOS & OS X written in Swift: 一套很完整的推ter訪問框架類庫,支持iOS/OS X
- RSBarcodes_Swift: "RSBarcodes allows you to read 1D and 2D barcodes using metadata scanning capabilities introduced with iOS 7 and generate the same set of barcode images for displaying and sharing." By @yeahdongcn Swift語言版二維碼識別及生成類庫。
- robb/Cartography: Set up your Auto Layout constraints declaratively. 這是有關自動布局約束一個實用的Swift項目,代碼看似簡單清晰,不過由于設計巧妙,還是邀請一位有經驗iOS的程序員解讀一下吧,該任務認領來這里。
- vikmeup/SCLAlertView-Swift: 動畫效果彈出框封裝庫(管理于CocoaPods),使用也足夠方便。試著運行了一下,效果還不錯。
2. 示例項目
- VirtualGS教程示例: 以下示例程序來源于林泰前老師微博或博客發布,為方便大家學習Swift編程,有幸獲得林老師的準許在這里發布。
- Easy-Cal-Swift: "實在忍不了Swift的數字計算時候的好麻煩的強制轉換了,重載了一下加減乘除之類的操作符,這樣就不用顯式地轉換類型了...(對于像我這樣現在連補全都沒有的孩子來說,能省好多時間啊- -)" By @onevcat
- An app to list the available fonts on iOS: 用Swift語言調用UIKit,列出設備內所有字體名稱的小程序。
- Swift版的知乎日報: 學習一門新語言,光看是沒有用的,想要快速的掌握它,就得投入到真實項目的開發中,仿照@YANGReal 的糗事百科,做了一個Swift版的知乎日報
- Swift RSS Sample: 用Swift語言開發的RSS閱讀器
- Swift版PM2.5的例子: 一個很好的Swift與Objective C協同工作GitHub開源項目。用到的開源類庫有TFHpple: 以XPath方式解析HTML,SCLAlertView: 使用Swift寫的AlertView SVProgressHUD 進度條 By @熒星訴語
- lexrus/LTMorphingLabel: 實現文字飄入飄出的效果。效果非常贊!
- rafaelconde/ios8-ui-kit: IOS 8 UI KIT + FOR SKETCH — 最新IOS8免費設計資源
3. 完整項目
- FlappySwift: 用Swift語言實現的 FlappyBird
- 天氣預報iOS項目: 新界面還不錯,簡單,還帶點卡通的味道
推薦網站
- raywenderlich.com(中文版): 由Ray Wenderlich創建,專注于開發高質量編程指南(近期優質Swift文章及視頻教程不斷),著名的iOS/OS X博客及開發教程網站,非常適合新手學習。近期第一時間出了三本Swift新書。
- NShipster (中譯版): 著名開源作者Matt Thompson創建的開發技術博客網站,他開發了AFNetworking網絡庫,也是非常多產的開源作者。更多了解參考:《COCOA 潮人 MATTT THOMPSON》 By @程序員付恒
- jamesonquave.com: 移動開發者,優秀個人博客(近期文章同樣關注于Swift語言,寫得很優質)。同時他將于8/30發布一本新書《Developing iOS 8 Apps in Swift》 (Learn To Make Real World iOS 8 Apps)及視頻教程。
- objc.io(中譯版 By @onevcat 及其朋友們): "關于 Objective-C 最佳實踐和先進技術的期刊。 由 Chris Eidhof, Daniel Eggert 和 Florian Kugler 成立于柏林。我們成立 objc.io 的目的是針對深入的、跟所有 iOS 和 OS X 開發者相關的技術話題創造一個正式的平臺。“
- iOS Dev Weekly: 收錄一周以來iOS開發資訊鏈接,并于周五發布。由Dave Verwer創辦,他是一位iPhone和iPad開發者以及培訓師。
資源合集
以下是其它開發者社區或Swift愛好者整理的有關Swift語言學習的資源列表,供參考:
- 碼農周刊《Swift 特刊》
- CocoaChina《Swift新手入門匯集帖》
- CSDN_CODE《Swift編程語言資料大合集》
- InfoQ《學習蘋果Swift語言的一些在線資源(英文)》
- 劉蘭濤《Swift學習資源》 By @懶桃兒吃桃兒
- InfoQ《蘋果發布Swift編程語言-iOS移動開發周報》: By @唐巧_boy
開放平臺
開放平臺相對于Swift語言更具戰略意義,這是開發者不得不面對的挑戰。也是蘋果新一代創新應用的催化劑。通過Extension達成應 用之間的協同及通訊,這是對生態內應用開放的基礎。讓我更期待的是,Extension在Safari Action上實現及支持,這是實現平臺開放及跨平臺應用最簡單直接的方案。 __
1. 文章精選
- 談談 iOS 8 和 OS X 10.10 的 Extension: "我個人認為這是 iOS 和 OS X 發展至今非常具有里程碑意義的一處改進,甚至比 UI 上的改變重要的多。我想簡單地談一下為何 Extensions 這么重要。" By @圖拉鼎
- App Extensions學習筆記: "系統中支持extension的區域,extension的類別也是據此區分的,iOS上共有 Today,Share,Action,Photo,Editing,Storage Provider,Custom keyboard幾種,其中Today中的extension又被稱為widget" By @foogry
2. 示例項目
- ViewSource(Swift+Objective-C): 通過iOS 8 Extension實現讓Web工程師喜歡的"顯示網頁源代碼"。
媒體文章
- WWDC 2014給開發者帶來了什么?: "蘋果向第三方開發者開放了大量的可調用特性和4000個新API——指紋識別、云存儲、智能家居平臺、相機控制、健康數據平臺、3D圖形API、對iOS 8可擴展程序的調用,以及新的編程語言Swift。PingWest制作了一種信息圖帶你一覽這些新特性"
- 編程語言進化鏈的頂端:為什么說Swift正在顛覆整個互聯網生態?(36Kr): "Swift 代表的程序猿先進生產力的發展要求(提高編程效率),代表了計算機先進文化的發展方向(語法簡潔,現代),代表了廣大人民的根本利益(寫起來爽,學起來快)。"
- 蘋果編程語言Swift解析:將推動應用開發巨變(CNET): "如果編程語言更加易學易用,那么應用開發的門檻將會降低,導致更多新手開發者參與這一行業。"
- 外媒評論:蘋果公司Swift語言將改變一切: 美國財經網站Motley Fool針對Swift比較中性的一篇評論文章,因此目標讀者是非技術人員,可讀性還不錯。
- 蘋果新貴 Swift 之前世今生(池建強): 這篇文章故事性很強,不過,的確把前世今生、來龍去脈交待了一遍,適合剛開始了解swift語言的程序員。
- WWDC 2014: 給第三方開發者的情書(Qdaily 李如一): "iOS 和 Mac 上的御用語言 Objective-C 可以追溯至 NeXT 時代,換言之,它已經有超過二十年的歷史。Swift 作為蘋果發明的編程語言,也繼承了蘋果產品的傳統"
- Swift中文翻譯組: 近30人9天協作完成翻譯近670頁的英文文檔
- 協同寫作的力量——中國開發者9天完成《Swift語言》中文版: "詳細介紹了GitHub上開源翻譯《Swift語言》這個開完項目,發起者是一個90后的大學生,整個翻譯團隊在9天內完成了近670頁的Swift語言文檔翻譯工作。" By 36Kr
- 翻譯暫時告一段落 寫點感想吧 : "現在翻譯已經告一段落,感覺這段時間的效率真是高的可怕,也許是因為一種成就感,或許帶了那么一點功利心(我想每個人或多或少的都會有一點吧)。" By @CoverXiT
- Apple的Swift語言: "哥也無意中在Github上看到這個翻譯項目,并有幸參與了翻譯,算是親身體驗了一把多人協作的開源項目,感覺很贊也很有成就感……" By @TimothyYe
- 雨燕Swift: "...我做翻譯這件事的目的其實挺自私的,沒想改變世界,沒想著跟世界同步,沒想干什么轟轟烈烈的大事。... 我是Aminby,和大多數程序員一樣默默無聞地用國內外先進的技術或解決方案為工作忙活著的普通人。" By @老白經aminby
- 蒂姆·庫克的蘋果: "當庫克走向舞臺左側的暗處時,氣氛一時變得神秘起來。這時蘋果軟件工程負責人克萊格·費德里西(Craig Federighi)快步走上臺。他和庫克插肩而過,走到聚光燈下,向大家介紹這款新品。它不是一款新的消費產品,而是一套名為“開發工具包”的軟件工 具,可以幫助開發人員開發出更好的應用。這個世界上的其他人可能會對此打哈欠,但開發者們站起身,興奮地叫嚷起來。"
其它相關
VM10裝Mac OS X 10.9.3及更新到Mac OS X 10.10: "嗯,我寫的。屌絲學生黨買不起Mac,只能在黑蘋果和虛擬機上先折騰會了。" By @Vong_HUST
Origami: 快速原型動畫開發工具。Origami由非死book開發Quartz Composer工具庫,它使原型開發更容易。參考文章:
- 次時代交互原型神器Origami檔案: "隨著iOS 7的推出,扁平化和極簡主義設計風格在移動互聯網領域流行起來,App動效越來越成為了決定App氣質的重要因素,原型的動態保真度似乎成為了阻礙設計師 發揮想象力的一道門檻。傳統的以點按為主的App設計,逐漸演變成為大量手勢交互,這使得Axure類工具表現手勢交互顯得心有余而力不足。基于QC的 Origami應運而生。"
- 用 Quartz Composer 和 Origami 制作一個簡單的按鈕動畫(譯文): "結識了 QC 和 Origami 之后,我就能用很短的時間制作出這個動畫的原型。我愛上了 QC 和 Origami —— 我希望你在使用它們之后,也會愛上它們。同時,我十二分地感謝 非死book 創造了 Origami,以及 Apple 創造了 Quartz Composer。" By @nixzhu