Handybook: Swift Jayant Sani
Handybook Opinions “It’s like Ruby on Rails, for iOS!” – Nikita “A function should only do one thing and return one value” - Justin
Brief History 1983: Objective-C is created 2000: Chris Lattner starts to work on LLVM, a compiler for Objective-C during college 2007: LLVM project releases Clang 2010: Lattner begins working on Swift 2012: Apple ditches GCC, giving LLVM more flexibility 2014: Apple announces Swift at WWDC
High-Level Overview Objective-C showing age – Smalltalk syntax o Around since the 1980s Many modifications to make it modern Compile time vs Runtime (Static and dynamic)
Modern Language Features No semicolons! Static type system Optional types Functional Programming Closures Tuples Generics Automatic Reference Counting Extensions REPL (Playgrounds) Designated and Convenience Initializers*
Static Type System Objective-C: Dynamic Typing, only object type was (id) in early stages Valid Objective-C code: NSString *string id str = string NSDictionary *dict= str; -Compiles fine, runtime error Swift: Static Typing
Guess what returns
Functional Objective-C: Blocks F*ckingblocksyntax.com returnType (^blockName)(parameterTypes) = ^returnType(parameters) { statements }; Swift: Functions are first class objects, Closures (param1Type, param2Type, …) -> returnType { (params) -> returnType in statements }
GenericsExtensions Tuples
Drawbacks Xcode 6 is very, very, very buggy – beta Proprietary Operator overloading – controversial No pointers – errors, functions Dealing with JSON Data Message passing vs. vtable Vague constants – “let” keyword No access modifiers Objective-C without Smalltalk