所有关于Swift的学习指南
                 jopen
                 10年前
            
                    Awesome-Swift-Education
A curated list of resources for learning about the Swift Language
Key
 = Gist 
 = Repository 
 = Blog 
 = Blog Post 
 = Slides 
 = Video Presentation 
 = Video 
 = Link 
 = Book 
 = Awesome List 
 = Learning Resource 
 = Interview Questions 
 = Networking Related Post 
 = Algorithm Related Post 
Index
- Open Source Swift
 - Swift Style
 - In-Browser Swift Editors
 - Quick References
 - Blogs
 - Newsletters
 - Great Learning Resources
 - Free Books
 - Presentations
 - WWDC Presentations
 - Other Video
 - Posts 
- Animations and Front End Stuff
 - Application Structure / Architecture
 - Associated Types and Objects
 - Closures
 - Collections / Sequences / Generators
 - Command Line and Swift Scripting
 - Core Data
 - Data Structures and Algorithms
 - Design Patterns
 - GCD and NSOperation
 - Generics
 - Development
 - Enums and Pattern Matching
 - Error Handling
 - Extensions
 - Functional Programming in Swift
 - Functional Reactive Programming in Swift
 - Initializers
 - Interpolability
 - Language Comparisons
 - LLVM Compiler
 - Objective C Transitioning to Swift
 - Open Source Swift
 - Operator Overloading
 - Opinions about Swift
 - Optionals and Types
 - Other
 - Problem Solving in Swift
 - Production Swift
 - Protocol Oriented Programming in Swift 2
 - Realm
 - Security
 - Swift Language
 - Text Manipulation
 - Type Reflection and Casting
 - Web Services and Networking
 - Web Services - Other
 
 - Interview Situations
 
Open Source Swift
- Apple Master Github Repository 
  - Swift Master Repository 
  - Download Swift 
  - Core Libs Unimplemented Parts 
  - Swift Core Libs Foundation Repository 
  - Swift Core Libs Dispatch Repository 
  - Swift CommonMark parsing and rendering library in C 
  - Swift Clang Repositroy 
  - Swift LLDB Repository 
  - Docker Swift 
  - Swift Packages 
  - Swift Compiler Crashes 
  - Open Radar Swift 
  
Swift Style
- The Official Swift Language Docs 
  - Swift Language Evolution 
  - Swift Stye Rules 
  - SwiftLint 
  - Swift Language Philosophies 
  - Swift Lang F.A.Q. 
  
In-Browser Swift Editors
Quick References
- Swift.org 
  - That Thing In Swift 
  - SwiftDoc 
  - iOS Cookies 
  
 Awesome Swift 
 
 Another Awesome Swift 
 
 Awesome Pure Swift 
 
 Awesome iOS 
 - iOS Good Practices 
  - Little Bites of Cocoa 
  - Libraries used in the top 100 Apps 
  - Fu*king Closure Syntax 
  - RAC Marbles 
  - Swift Knowledge Base 
  
Blogs
- iOS at Artsy 
  - The Swift Diary 
  - Human Friendly Swift Blog 
  
 Objc.io 
 - NSBlog with Mike Ask 
  - Use Your Loaf 
  - Chris Eidhof 
  - Ole Begemann 
  - Uramio 
  - Swift Weekly 
  - Erica Sadun 
  - ThinkAndBuild 
  - MetalByExample.com 
  - David Owens 
  - The iOS Times Curated Review of the latest leading Github Projects 
  
Newsletters
- This Week in Swift News: Curated Swift News 
  - iOS Goodies 
  - iOS Dev Weekly 
  - Swift Sandbox Newsletter 
  - SwiftLang Website 
  
 Awesome Swift News 
 - Swift Weekly 
  - Gettin' Swifty With It 
  
Great Learning Resources
- Hacking With Swift 
  - A Better way to learn Swift 
  - Ray Wenderlich Tutorial Pages 
  - Swift Education 
  - Play with Swift 
  - Realm Roundup: 25 Realm Resources and Tutorials 
  - Funcitonal Reactive Programming iOS Learning Resources 
  - Learn Core Data 
  
Free Books
Presentations
- All the slides from Swift Summit 2015 
 and highlights from the talks 
 and notes 
  - All the Presentations from Swift Summit London 
  - All Presentations from #Pragma Conference 
  - MobileKonf 2015 
  - Functional Swift Conf 2014 
  - CocoaConf Videos 
  
 Awesome iOS Conferences 
 
WWDC Presentations
- Search through WWDC Presentations 
  - Code Samples From WWDC 
  - WWDC Full Text WriteUps 
  
 Protocol-Oriented Programming in Swift 
 - Make all Value Types Equatable 
  - Advanced NSOperations 
  - UI Testing in Xcode 
  - Continuous Integration made Easy in Xcode 7 
  - What's new in Xcode 
  - Swift in Practice 
  - Networking with NSURLSession 
  
Other Video
- Swift Language 油Tube Channel 
  - Free Swift Lang Course 
  - Explaining the mutating keyword 
  - Swift tutorial Video Series 
  
Posts
Animations and Front End Stuff
- Mixing SpriteKit with UIKit in iOS 9 
  - AdaptiveUI Animations 
 and 
  - iOS Animations with AutoLayout 
 and 
  - Metal and Swift 
  - Animating Constraints 
  - Advanced UITableViews 
  - SpriteKit as an intro to SceneKit 
  
Application Structure / Architecture
- You Used To Inject Me In Your Constructor 
  - Swift Inject Dependency Injection 
  - Class or Struct? 
  - RE: Class or Struct 
  - Uber Jetstream 
  - Mutating Funcs in Swift Structs 
  - MVVM in Swift 
  - Refractor the Mega Controller 
  - 250 Days of using VIPER Architecture with Swift 
  - Safer with VIPER 
  - Dependency Injection in Swift 
  - Preventing Massive View Controllers 
  - A Structy Model Layer 
  
Associated Types and Objects
- Protocols with Associated Types and how they got that way 
  - Associated Types in Swift Explained 
  - Illuminating Forum Post 
  - How to make Generic Protocols in Swift 
  - Associated Enum Data As Types 
  
Closures
Collections / Sequences / Generators
- A quick guide to SequenceType 
  - Sequences and Generators in Swift 
  - Experimenting with Seqs and Generators 
  - Can we please make a standard style for closures? 
  - Sets vs Dictionaries in Swift 
  - The Fibonacci SequenceType 
  - Truly Lazy Sequences 
  - Using Generators for UITableView Pagination Purposes 
  - A Little Respect for AnySequence 
  - Swift Sequence Lib 
  
Command Line and Swift Scripting
- Swift Scripting 
  - Learn Swift by running Scripts 
  - Scripting in Swift is Pretty Awesome! 
  - Swiftline 
  - How Swift Scripting was used to make iOS Cookies 
  - Writing an Xcode Plugin with Swift 
  
Core Data
- Core Competencies 
  - A Swift Into To Core Data 
  - Moving from ObjC to Swift with Core Data 
  - What, if any, ACID gurantees does Core Data Make? 
  - Core Data Libraries and NSKeyedArchiver 
  - Ditching Core Data for Something else 
  - JSQCoreDataKit 
  - Comparing Core Data Stacks 
  - Using Core Data with Swift 
  - Better Core Data Models with Swift 
  - Core Data in 2015 and Magical Record in Swift 
  
Data Structures and Algorithms
- An Array implemented in Swift by Mike Ash 
  - A Trie 
  - A persistent tree using indirect enums 
  - Deques, Queues, and Lists in Swift with indirect 
  - Linked Lists are really slow 
  - Linked Lists, Enums, Value Types 
  - Singly Linked List 
  - Deques, Queues, and Lists in Swift 
 
  - Contiguous Arrays in Swift 
  - NSArrays are implemente with Circular Buffers 
  - Open sourced CFArray 
  - Abstract Algebraic Structures in Swift 2 
  - Patricia/Radix trees for Swift 
  - Genetic Programming in Swift 
  - Finger Trees in Swift 
  - Neural Networks in Swift 
  - Swift AI 
  - Lazy infinite streams 
  - Naive Bayes Classifier 
  - Swix Swift Matrix Math Library 
  - Red Black Tree 
  - Tensor Methods in Swift 
  - Sort Utils 
  - Disjoint Sets 
  - Metaprogrammable 
  - Binary Tree 
  
Design Patterns
- Swift Design Patterns 
  - Template Method Pattern in Swift 
  - Design Patterns Library in Swift 
  - Creating a Cocoa Bindings Observable Pattern in Swift 
  - Observer Pattern in Swift 
  - The Sin of Singletons 
  - The Null Object Pattern 
  - Segues > Delegation 
  - Functions as Factories 
  - Conform to Objective C Protocols in Swift 
  - Optional Protocol Methods 
  - The Builder Pattern and Fluent Interface 
  - A Better NSNotificationCenter Observer Pattern 
  - Key Value Coding in Swift 
  - Exploring KVO Alternatives in Swift 
  
Development
- Result Driven Development 
  - Library Oriented Programming 
  - * Oriented Programming 
  - Hole Driven Development 
  - Entering a New Codebase 
  
Enums and Pattern Matching
- Enums 
- Enums in Swift 
  - Advanced and Practical Enum Usage in Swift 
  - Enumerating Tuple Values in Swift 
  - Simplfied Login with Swift Enums 
  - Testing of Enums made easy 
  - How to compare Enums with Equatable 
  - Raw representable enumeration 
  - Enums with Associated Data vs Structs 
  - The Sum Types are here 
  - Algebraic Data Types in Swift 
  
 - Enums in Swift 
 - Pattern Matching 
- Swift's pattern-matching switch statement 
  - Custom pattern matching in Swift 
  - Advanced Swift Pattern Matching in Detail 
  - Control Flow & Pattern Matching 
  - Ranges and Intervals in Swift 
  - More Pattern Matching Examples 
  - What is a variadic parameter? 
  - Pattern Matching in Swift 
  - Swift Pattern Matching in Detail 
  - Pattern Matching with an if case 
  - Pattern Matching with Recursive Values in Swift 
  
 - Swift's pattern-matching switch statement 
 
Error Handling
- Easy Error Handing 
  - Swift Failiable Initializers 
  - Swift 2.0: Why Guard is Better than If 
  - Swift 2 Error Handling 
  - Swift 2 Error Handling and Pattern Matching 
  - Guard and Defer 
  - Unmanaged Type 
  - try/catch with asynchronous closures 
  - Using the assert() keyword 
  - Result: Swift type modelling the success/failure of arbitrary operations 
  - Error Styling in Swift 
  - Async Error Handling in Swift 
  
Extensions
Functional Programming in Swift
- Deriving higher order functions in Swift 
  
 Swiftz Functional Programming Library 
 - Swiftx Functional Data Types 
  - Functional View Controllers 
  - Covariance and Contravariance in Swift 2.1 
  - Monads & C# Tasks in Swift 
  - Introduction to Function Currying in Swift 
  - Practical Use of Curried Functions in Swift 
  - Composing functions in Swift 
  - Swift is not functional 
  - Functional Paradigms in Swift 
  - Functional Programming in the Swift Language 
  - Map and FlatMap demystified 
  - Using Local Closures with Swift 
  - Function Params are Tuples in Swift 
  - Lenses in Swift 
  - Prelude Library 
  - Functional Programming in a Playground 
  - Functional Programming as a Functionalist 
  - Object Oriented Functional Programming 
  
 Functional Programming in Swift 
 - NatashaTheRobot Explains Functional Programming 
  - Make Swift More Functional 
  - FP in Swift 
  - Thinking Functionally Using Swift 
  - Practical Declarative 
 and Functional 
 Swift  - Functional Notification Pattern 
  - The monad among us 
  
 Functors, Applicatives, and Monads in Swift 
 - Futures and Latency as an effect in Swift 
  - Continuation Passing Style in Swift 
  - An intro to Continuation Passing Style in Swift 
  - Proof in Functions 
  - Functional Thinking 
  - Chris Eidhof Functional Swift Talk 
  - Transducers and Reducers in Swift 2 
  - Lenses, Prisms, Isos in Swift 2 pencil2
 - Better Recursion with Swift 
  - Folds in Swift 
 
  - Swift Adventures in Monad Land 
  - Functor and Monad in Swift 
  - Llama Calculus 
  - FingerTrees 
  - FizzBuzz with infinite streams 
  - 6 Killer Functional Swift Features 
  - Thunks in Swift 
  - 7 Habits for more functional Swift 
  - Y Combinators in Swift 
  - Arrows in Swift 
  - Understanding Reduce in Swift 
  - Monadic Functions in Swift 
  - Lazy Streams in Swift 
  - Funky Functional Programming Tools and Experiements 
  - Functional Memoization in Swift 
  - Reader Monad in Swift 
  - Writer Monad in Swift 
  - Back to the Futures with Swift 
  
Functional Reactive Programming in Swift
- MVVM + FRP 
  - Introduction 
  - Reacting to Events 
  - ReactiveCocoa 4.0 Info 
  - The Difference between RxSwift and ReactiveCocoa 
, 
  - FRP in Swift 2.0 
  - Functional Reactive Programming in an Imperative World 
  
 RAC 3 with Ash Furrow 
, and some other nice 
 - FRP with RAC in Swift 
  - Learning RxSwift 
  - Upgrading to RxSwift 
  - FRP is a forbidden term 
  - What is FRP? On StackOverflow 
  - From RAC to RxSwift: The (Mini) Survival Guide 
  
GCD and NSOperation
- Basics 
  - Methods of concurrency — GCD, agents, tasks and invocations 
  - Code at the end of the queue 
  - Delaying Code Execution through Closures 
  
Generics
- Generic Arrays in Swift 2.0 
  - The shortcomings of generic protocols 
  - Generics in Swift, Part 1 
  - Generics in Swift, Part 2 
  
Initializers
Interpolability with C and Objective-C
- Swift and C 
  - Swift & the ObjC Runtime 
  - How is Swift Faster than Objective-C? 
  - Wrapping a C library in a Swift Framework 
  - How are NSDictionaries implemented in-memory? 
  - Exposing NSMutableArray 
  - Source-Code for the Objective-C Runtime 
  
Language Comparisons
- Comparing Swift and Javascript 
  - C++ Advice to Swift Devs 
  - Swift Protocols vs Java 8 Interfaces 
  - Learning Swift from Haskell 
 and corresponding 
  - Swift vs Golang 
  
LLVM Compiler
- Swift Intermediate Language 
  - Using the LLVM API With Swift 
  - LLVM and Swift 
  - Swift Performance 
  - Swift 2 Under the Hood 
  
Objective C Transitioning to Swift
Open Source Swift
Operator Overloading
Opinions about Swift
Optionals and Types
- Typelift Community Repo 
  - Swift Optionals Made Simple 
  - Swift's Type System 
  - Every Kind of Optional 

 - Understanding Downcasting Operators in Swift 
  - Swift Manual Retain/Release 
  - How I handle Optionals in Swift 
  - How to unwrap an optional in 9 different ways 
  - Optional Protocol Methodsin Pure Swift 
  - Make a DSL in Swift 
  - Type-Erased Wrappers in Swift 
  - Swift MetaTypes 
  - Typing the Knot in Swift 
  
Other
- @autoclosure, @inline, @noescape, and @noreturn Keywords 
  - How to use @noescape 
  - How to use @autoclosure 
  - Magic Methods in Swift 
  - weak vs unowned 
  - Swift weak references 
  
Problem Solving
Production Swift
- How Carthage works 
  - Bottom Up Programming in Swift 
  - Make a Cocoapods Framework 
  - Lessons from Production Swift 
  
Protocol Oriented Programming in Swift 2
- Protocols in Swift 
  - POP is OOP Thesis 
  - Standard Template Protocols 
  - Protocol Oriented MVVM 
, 
  - Functional thinking via Protocol Extensions 
  - Protocol Extensions vs Type Extensions 
  - Swift Diagrams Playground for P.O.P. 
  - Gist covers whatever went on in the official presentation 
  - What are the advantages? 
  - Another look into the concept of P.O.P. 
  - If you're subclassing, you're doing it wrong. POP and VOP explained 
  - Every Swift Value Type Should be Equatable 
  - Protocol Oriented Programming through UIKit 
  - Protocols in Swift 
  - Ray Wenderlich intro to P.O.P. 
  - Protocol Extensions and the death of the Pipe forward operator 
  - How Protocol Oriented Programming could still improve 
  - THe Swift Protocol Proposal 
  - Swift Default Protocol Implementations 
  
 Mixins and Traits in Swift 2.0 
 - Minimal Swift 2.1 Protocol Coformance 
  - Favor Mixins over inheritance 
  - Use Protocol Composition 
  - The 55 Standard Lib Protocols Broken Down 
  - Can Swift have Dependent Types? 
  - More Misunderstanding of Dependent Types 
  - 55 Standard Library Swift Protocols 
  - Current Recommmended Protocol Usage 
  - POP in Swift vs ObjC and C++ 
  - POP Utility Belt 
  
Realm
- Super simple Realm Intro 
  - Why Realm over Core Data? 
  - Official Realm Introduction 
  - Realm Tutorial 
  - Why Realm is great and why we're not going to use it 
  - Realm Best Practices 
  - Realm Repo 
  - What Realm does that Core Data doesn't 
  - Reddit Thread 
  - A look into Realm's Core DB Engine 
  - Working with Realm 
  
Security
Swift Language
- Best of Swift 2 
  - New Features in Swift 2 
  - Switching your brain to Swift 
  - Short Circuit Evaluation 
  - How Swift makes your life better 
  - Emerging best practices in Swift 
  - Swift Thinking 
  - Hidden Gems in Swift 
  - Making Friends with Value Types 
  - Catching up with Swift 
  - Idiomatic Swift 
  
Text Manipulation
- RegularExpressions in Swift 
  - Creating a Lexer in Swift 
  - Creating an Abstract Syntax Tree Parser in Swift 
  - Part 2 of the AST 
  - String to Number Parser 
  
Type Reflection and Casting
- Simple Reflection in Swift 
  - Understanding Reflection in Swift and how to use it 
  - Typecasting and the Swift Runtime 
  - Advanced Type Safety in Swift 
, and corresponding 
  
Web Services and Networking
- SwiftHTTPStatusCodes 
  - Calling APIs and Parsing JSON with Swift 
  - Parsing Embedded JSON and Arrays in Swift 
  - Real World JSON Parsing 
  - Efficient JSON Parsing with Functional Concepts 
  - Calling a REST Api in Swift 
  - How to Make REST API Calls and Parse JSON with Swift 
  - HTTP in Swift 
  - Reachability Library 
  - JSON in Swift 
  - Functional JSON Parsing 
  - NSURLSession Basics 
  - Background Downloads 
  - An AlamoFire Router 
  - Moya: Network Abstraction Layer written in Swift 
  
Web Services - Other
- CloudKit Introduction 
  - Create a Data Access Layer with SQLite.swift and Swift 2 
  - Using YapDatabase 
  - { JSON, Swift, and Type Safety } 
  - MagicalRecord loves Swift 
  - Networking with Monads 
  - Swift-MongoDB