/Awesome-Swift-Education

:fire: All of the resources for Learning About Swift

Primary LanguageSwiftMIT LicenseMIT

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 πŸ“„

⬆️

Concurrency

⬆️

Control Structures

⬆️

Data Structures and Algorithms

⬆️

Dates

⬆️

Debugging

⬆️

Design Patterns and AntiPatterns

⬆️

Development Paradigms

⬆️

Enums and Pattern Matching

⬆️

Error Handling

⬆️

Extensions

⬆️

FAQs

⬆️

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 ✏️

⬆️

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 πŸ”—
  • Dependency Injection
    • You Used To Inject Me In Your Constructor πŸ’Ύ
    • Dependency Injection with a Custom Initializer πŸ“„

⬆️

Interpolability

  • C
    • Swift And C: Everything You Need to Know πŸ“„
    • Why C is not always safe Swift πŸ“„
    • Wrapping a C library in a Swift Framework πŸ“„
    • Mapping Swift Types to C Pointers πŸ“„
  • Objective-C
    • Wrapping Objc Frameworks in Swift πŸ’Ύ
    • Casting Swift objects to Objective-C types πŸ“„
    • How to call Objective C code from Swift πŸ“„
    • Swift extensions on Objective-C classes still need to be prefixed πŸ“„

⬆️

Internals

⬆️

Language Comparisons

⬆️

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 πŸ“„

⬆️

Protocol Oriented Programming

⬆️

REPL

Security

⬆️

Server Side Swift

⬆️

Strings and Regular Expressions

⬆️

Testing

⬆️

Tools

⬆️

Types

⬆️

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 πŸ”—

⬆️

JSON

⬆️

Persistence

⬆️

UI

⬆️

Web Services, Routing, and Networking

⬆️

Mac Programming with Swift

WatchOS Programming with Swift

tvOS Programming With Swift

  • Creating a Client Server tvOS app πŸ”—

⬆️

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 coworker @michaelgray. And finally, Shoutout to all the Swift Programmers out there, this project is by you and for you!

⬆️