Skip to content

solejay/Awesome-Swift-Education

Β 
Β 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Awesome-Swift-Education Awesome Build Status

There is no royal road to Swift. β€”Euclid

Index

Open Source Swift

⬆️

Swift Style

⬆️

In-Browser Swift Editors

⬆️

References

⬆️

Great Learning Resources

⬆️

Books

⬆️

Video

⬆️

Swift Community

⬆️

Programming with Swift

Audio

⬆️

Closures and Functions

⬆️

Collections

⬆️

Command Line and Scripting

  • Swift Command Line Application Template ✏️
  • Using Swift As General Purpose Scripting Language πŸ“„
  • Swift framework for launching shell tasks ✏️
  • Swift framework for parsing command-line arguments ✏️
  • Command Line Utilities in Swift πŸ“„
  • Make command line applications in Swift πŸ“
  • SwiftingBridge ::

⬆️

Concurrency

⬆️

Control Structures

⬆️

Data Structures and Algorithms

⬆️

Dates

⬆️

Debugging

⬆️

Design Patterns and AntiPatterns

⬆️

Development Paradigms

⬆️

Enums and Pattern Matching

⬆️

Error Handling

⬆️

Extensions

⬆️

FAQs

⬆️

Foundation

  • Measurements and Units in Foundation πŸ“„

⬆️

Functional Programming

⬆️

Functional Reactive Programming

⬆️

Generics

  • Generic Arrays in Swift 2.0 πŸ“„
  • Partial Function Application with Generics πŸ”—
  • Template Metaprogramming Swift πŸ“„
  • Generic Functions for Incompatible Types πŸ“„

⬆️

Initialization, Properties, and Dependency Injection

  • Initialization
    • What are get and set? πŸ“„
    • Why is the convenience keyword needed in Swift? πŸ”—
    • When should I use deinit? πŸ”—
    • Designated and Convenience initializers in Swift πŸ“„
    • Writing Class Initalizers πŸ“„
    • Definitive Variable Initialization πŸ“„
  • Properties
    • Type Properties
      • Instance property vs static type property vs computed type property πŸ“„
    • Stored Properties
    • Named Parameters
      • Named Parameters πŸ“„
      • Intuition behind the Swift external/local parameter system πŸ“„
      • Swift named parameters πŸ“„
    • Property Observers
      • Property Observers and Lazy Properties πŸ“„
    • IBOutlets
    • Computed Properties
      • Beware of Computed Properties πŸ“„
      • How to use swift computed properties πŸ“„
      • Computed Properties and Initializers
      • Static Vars are Lazy in Swift πŸ”—
      • Turn Computed Property into Lazy Property πŸ“„
    • Static Properties
      • Static Properties πŸ“„
      • Does Swift have class level static variables πŸ“„
      • Static vs class functions/variables in Swift classes? πŸ”—
    • Read-only
      • Read-only and non-computed variable properties πŸ”—
    • Atomicity
  • Dependency Injection
    • You Used To Inject Me In Your Constructor πŸ’Ύ
    • Dependency Injection with a Custom Initializer πŸ“„

⬆️

Interpolability

⬆️

Internals

⬆️

IO

  • Basic File Reading and Writing Using Swift πŸ“„
  • Read and write data from text file πŸ“„
  • Working with Files in Swift πŸ“„
  • A portable I/O framework for Swift ✏️
  • Reading and Writing Files to the iOS File System πŸ“„
  • Write large files to disk on background thread πŸ“„
  • Zip and unzip files with Swift ✏️
  • NSData extension enables gzip/gunzip using zlib ✏️
  • FileKit πŸ“
  • Zipping and unzipping files in your Swift app πŸ“„

⬆️

Language Comparisons

  • Language Comparisons
    • Haskell
      • What do Haskell developers think of Swift? πŸ”—
      • A Swift introduction to Haskell πŸ’Ύ
      • Hindley-Milner languages πŸ”—
      • Quicksort in Swift with Haskell style πŸ”—
      • Lesson In Swift Through Haskell πŸ’Ύ
    • Javascript
      • Comparing Swift and Javascript πŸ“„
    • C
    • C++
      • Is Swift a viable alternative to C++ for performance critical code? πŸ“„
      • Swift vs Modern C++ πŸ”—
      • Use a C++ Library from Swift πŸ“„
    • C#
      • Swift for C# Developers πŸ“„
      • Swift is a lot like C# πŸ”—
      • Swift vs C# πŸ“„
      • Swift vc C# reference guide πŸ”—
      • Is something in Swift like LINQ in C# πŸ”—
      • Are the Tuples in Swift complete alternative to Anonymous types as in C# πŸ”—
      • Swift Protocol Extensions and C# Abstract Classes πŸ“„
      • C# like async in Swift πŸ“„
    • Java
      • Swift Protocols vs Java 8 Interfaces πŸ“„
      • Swift 2.0 Protocol Extensions vs Java Abstract Classes πŸ”—
      • Swift vs Java Performance πŸ“„
      • Making Abstract Classes in Swift πŸ“„ πŸ“„
      • Why doesn't Apple Swift adopt the memory management method of garbage collection like in Java? πŸ“„
      • Class level or struct level method in swift like static method in Java? πŸ”—
      • Difference between Swift 2.0 protocol extensions and Java/C# abstract classes? πŸ“„
    • Kotlin
    • Android
      • How to Start Android Development with an iOS Background πŸ“„
      • Faceoff: Android vs. iOS 🎀
      • Using JNI in Swift to put an app into the Android Play Store πŸ“„
      • How we put an app in the Android Play Store using Swift πŸ“„
    • Go
    • Rust
    • Ruby
    • Scala
    • OCaml
    • Python
    • Elixir
      • Comparing Protocols and Extensions in Swift and Elixir πŸ“„
    • Groovy
      • Apple's Swift programming language inspired by Groovy πŸ“„
    • React Native
      • Tutorial: Custom React Native Components in Swift πŸ“„
      • Bridge a Swift view in React Native πŸ“„

⬆️

Linux

⬆️

Optionals

  • How I handle Optionals in Swift πŸ“„
  • How to unwrap an optional in 9 different ways πŸ“„
  • Optional Protocol Methods in Pure Swift πŸ“„
  • Swift Optionals Made Simple πŸ“„
  • Every Kind of Optional πŸ“„
  • Pervasive use of Optional in Swift is penance for nil πŸ“„
  • Optionals under the hood πŸ“„
  • Nil coalescing operator πŸ“„
  • Understanding Optional Chaining πŸ“„

⬆️

Problem Solving

⬆️

Production

  • Dependency Managers
  • Modules and frameworks
  • Docker
    • Deploy and run Swift Kitura Applications with Docker πŸ“„
    • Docker image that contains all dependencies for building and running the Kitura sample application ✏️
    • Docker for iOS Development ✏️
    • How I'm dockerizing Swift web apps πŸ“„
    • Docker containers used for spinning up different Swift web frameworks πŸ“„
    • Easy Server Side Swift with Docker πŸ“„
    • Swift example to run on Kubernetes ✏️
    • Run Linux Swift on your Mac or PC with Docker πŸ“„
  • Other

⬆️

Protocols

  • Using the Hashable Protocol πŸ“„ πŸ“„
  • Swift Protocol Naming Conventions πŸ“„
  • A default CustomStringConvertible implementation for Swift types πŸ“„
  • A protocol that allows any class to be printed as if it were a struct πŸ“„
  • Implementing Equatable for Protocols in Swift πŸ“„

⬆️

Protocol Oriented Programming

  • Practical Protocol-Oriented-Programming 🎀
  • Protocol Extensions vs Type Extensions πŸ“„
  • 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 πŸ“„
  • Protocol Oriented Programming through UIKit πŸ“„
  • Protocols in Swift πŸ“„
  • Ray Wenderlich intro to POP πŸ“„
  • Protocol Extensions and the death of the Pipe forward operator πŸ“„
  • How Protocol Oriented Programming could still improve πŸ“„
  • The Swift Protocol Proposal πŸ“„
  • πŸ™Œ Mixins and Traits in Swift 2.0 πŸ“„
  • Minimal Swift 2.1 Protocol Coformance πŸ“„
  • Favor Mixins over inheritance πŸ“„
  • Current Recommended Protocol Usage πŸ“„
  • POP in Swift vs ObjC and C++ πŸ“„
  • POP Utility Belt ✏️
  • Typesafe and Composable Data Sources in Swift πŸ“„
  • Protocol Extension Method Dispatch πŸ“„
  • Weird things you can do with protocol extension πŸ“„ πŸ“„
  • Improved Protocol-Oriented Programming with Untyped Type Aliases πŸ“„ πŸ“„
  • Protocol-Oriented Problems and the Immutable 'self' Error πŸ“„
  • Multiple Inheritance vs. Traits or Protocol Extensions πŸ“„
  • Protocol Oriented Networking πŸ“„ πŸ“„ πŸ’Ύ
  • Protocol-Oriented Views in Swift πŸ“„
  • Protocol oriented loading of resources from a network service in Swift πŸ“„

⬆️

REPL

⬆️

Security

⬆️

Server Side Swift

⬆️

Strings and Regular Expressions

⬆️

Testing

⬆️

Tools

⬆️

Types

  • Reference Types (Classes)
    • Weak, Strong, Unowned πŸ’Ύ
    • Is Swift Pass By Value or Pass By Reference πŸ”—
    • How can I make a weak protocol reference in 'pure' Swift (w/o @objc) πŸ”—
    • When to use weak pointers with delgates πŸ”—
    • Instance methods and type methods in Swift πŸ“„
  • Value Types (Structs)
    • How can I make a container with copy-on-write semantics? πŸ“„
    • When to use mutating functions in swift structs πŸ“„
    • Mutating Funcs in Swift Structs πŸ“„
    • Making Friends with Value Types 🎀
    • Swift copy-on-write behavior for a struct using HeapBuffer πŸ“
    • Swift pass struct by reference? πŸ“„
    • Value Types πŸ“„
    • Fully Value-Typed Arrays in Swift πŸ“„
    • Swift and mutating struct πŸ”—
    • Safer swift code with value types πŸ’Ύ
    • Value oriented Architecture πŸ’Ύ
    • Reference and Value Types in Swift πŸ“„
  • Algebraic Types
  • Compose Types
    • Named Types and Compound Types πŸ“„
  • Abstract Types
    • Understanding Swift’s Abstract Types (Swift 2.2 & above) πŸ“„
    • Understanding Abstract Types πŸ“„
  • Wrapper Types
  • Phantom Types
    • What are Phantom Types good for? πŸ“„
  • Dependent Types
    • An implementation of a dependently-typed intermediate language ✏️ ✏️
    • Dependent Types: I'm missing something πŸ“„
    • Backwards Dependent Types πŸ“„
    • Type-Level Assertions (or, almost-dependent types) πŸ“
    • Validated: A Swift ΞΌ-Library for Somewhat Dependent Types πŸ“„
  • Dynamic Types
    • DynamicType and MultiMethods πŸ“„
    • DynamicTypes and Metatypes πŸ“„
    • A Definition of Dynamic Programming in the Cocoa World πŸ“„
  • Nested Types
  • Type Reflection and Casting
    • Basic Reflection in Swift πŸ“
    • Swift class introspection & generics πŸ“„
    • Typecasting and the Swift Runtime πŸ“„
    • Why doesn't Swift have implicit type conversion? πŸ“„
    • as? vs as! πŸ“„
    • Understanding Downcasting Operators in Swift πŸ“„
    • Type check with switch statements πŸ“„
    • Increased Safety in Swift 3.0 πŸ“„
  • Associated Types
    • Swift: What are Protocols with Associated Types? πŸ“„
    • Associated Types Considered Weird πŸ“„
    • Swift Associated Types, cont πŸ“„
  • Type Aliases
  • Metatypes
    • What is ExistentialMetatype in Swift πŸ“„
    • Bridging Existentials and Generics in Swift 2 πŸ“„
  • MirrorTypes
    • Using a Mirror Struct to get an object's type πŸ”—
  • Typeclasses
    • Typeclasses in Swift, Haskell and Scala πŸ“„
  • Type Inference
    • Implicit Member Expression πŸ“„
    • Referential Transparency πŸ”—
    • Swift Type Inference Closure Constraints πŸ“„
  • Type Variance
  • Type Erasures
  • Type Checking
    • Exponential time complexity in the Swift type checker πŸ“„

⬆️

Weird Swift

⬆️

iOS Programming with Swift

Application Structure / Architecture

⬆️

Core Data and Realm

⬆️

Core Image

⬆️

iOS

  • All of the Apple Device Frameworks πŸ”—
  • Apple Example Code πŸ”—
  • iOS 9 Programming Fundamentals with Swift πŸ”—
  • Top SDKs used by App Store Top 200 Free Apps πŸ”—
  • Introduction to SiriKit πŸ”—

⬆️

JSON

  • Functional Parsing
    • Efficient JSON Parsing with Functional Concepts πŸ“„
  • { JSON, Swift, and Type Safety } πŸ’Ύ
  • JSON in Swift πŸ“„

⬆️

Persistence

⬆️

UI

⬆️

Web Services, Routing, and Networking

⬆️

Mac Programming with Swift

WatchOS Programming with Swift

tvOS Programming With Swift

⬆️

Xcode

  • About
  • Build System
  • Interface Builder
    • Implementing UI Designs in Interface Builder πŸ“
    • Integrating Designs through IB 🎀
    • IBInspectable / IBDesignable πŸ“„

⬆️

Emoji Key

  • πŸ“ = Gist
  • ✏️ = Repository
  • πŸ““ = Blog
  • πŸ“„ = Blog Post
  • πŸ“œ = Quick Reference
  • πŸ“š = Book
  • πŸ“– = Guide Book
  • πŸ“° = Newsletter
  • πŸ’Ύ = Slides
  • 🎀 = Video Presentation
  • πŸ“Ή = Video
  • πŸ”— = Link
  • πŸ”₯ = Awesome List
  • πŸŽ“ = Learning Resource
  • πŸ“‹ = Interview Questions

⬆️

Shoutouts

Shoutout to @clattner_llvm, the OG Swift Developer. Shoutout to @chriseidhof for encouraging me to promote this idea and for being a huge baller. Shoutout to @ashfurrow and @Ben-Evolently for being so incredibly helpful. Shoutout to @CodaFi_, the TypeLift, and the AntiTypical teams for promoting FP. Shoutout to Elm Trailblazers. Shoutout to Haskell Devs and Category Theory legends. Shoutout to FutureKit, made by my former coworker @michaelgray. And finally, Shoutout to all the Swift Programmers out there, this project is by you and for you!

⬆️

About

πŸ”₯ All of the resources for Learning About Swift

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Swift 100.0%