S Link
PaintCode 3 now supports Swift 3, Android and JavaScript
PaintCode is a vector drawing app that turns your drawings into Swift Core Graphics code. PaintCode 3 — the latest version — just added more than 10 new features, including support for Swift 3, Android and JavaScript code generation.
OfferUp is looking for iOS developers in the Seattle area
OfferUp is a Seattle-area start up that is changing how we buy and sell locally by making it as easy as sharing a photo from your phone. We are creating a simple and safer marketplace where we help buyers and sellers link up with ease. We are a rapidly growing team and are looking to bring on more passionate, motivated, and curious people.
Swift Around the Web
noescape + Swift
In Swift 3, @noescape
is the default value in closures and is therefore deprecated. However, you now have to think about when to make a function escaping. Really good explanation of what @noescape
vs @escaping
means:
"I’ve seen it explained many ways, but essentially it boils down to this: timing and scope.
As in, will the passed inclosure be called post function invocation? If the function returns but we call the closure at a later point in time in the execution flow — then it’s most certainly escaped that function 🏃.
Though conversely, if we only expect that function to do its thing within the function’s scope — then it’s not getting its grimy mittens on anything else. Thus, it’s a non-escaping closure."
The RawRepresentable Protocol in Swift
Good tip!
"
RawRepresentable
isn’t limited to enums. It can also make sense for structs and classes to add conformance. Option sets also make use of the protocol (OptionSet
inherits fromRawRepresentable
)."
Coding
Composite Validators
Wow! Just absolutely gorgeous Swift architecture for validators using protocols and value types to create very short readable units of code that all do only one small thing! Must read.
Protocol Oriented Programming is Not a Silver Bullet
When you have a hammer, everything looks like a nail. While protocols are an amazingly powerful tool in Swift, it is important to remember that it's not the only tool and there might be another tool that is better for the job. My favorite eye-opening talk on this topic is still Rob Napier's Beyond Crusty: Real-World Protocols.
Design
How are the World’s Most Successful Brands Using the Psychology of Color in their Branding
Orange: Excitement, Enthusiasm, Warmth, Caution 🤔
Other Cool Stuff
Jewelbots: The friendship bracelet that teaches kids to code
I backed Jewelbots on Kickstarter a while ago, and they've finally shipped! My little sister was super excited to receive hers this week. Great 🎁 idea for the upcoming holidays! Happy CyberMonday!
Videos
Swift and the Legacy of Functional Programming
Another amazing talk from Rob Napier on functional programming and where it fits in Swift. I love thinking of structs as "and" types and enums as "or" types. Must watch to understand how to architect code well in Swift!
'I have a framework idea' - Repeat less, share more.
This was one of my favorite talks from Pragma Conf. Frameworks are key in a world where we have to develop for multiple platforms, including iOS, watchOS, tvOS, macOS, and extensions. Fabio has invaluable tips and gotchas for making cross-platform frameworks.
Swift Evolution
SE-0145: Package Manager Version Pinning
Sweet! This is a must-have feature for SPM. Glad it's being added!
"This is a proposal for adding package manager features to 'pin' or 'lock' package dependencies to particular versions."
Swift Code
- Framework - A template for new Swift iOS / tvOS / watchOS / macOS Framework project ready with travis-ci, cocoapods, Carthage, SwiftPM and a Readme file
- Edge - A Swift Multiplatform Web and Networking Framework
- Vulcan - Multi image downloader with priority in Swift
- Eject - An eject button for Interface Builder to generate swift code
- CreditCardForm-iOS - CreditCardForum-iOS is an iOS demo app that allows developers to create the UI which replicates an actual Credit Card.
- Jelly - Jelly provides custom view controller transitions with just a few lines of code 💪
Learning
An Apology to Pat Rothfuss
"There are two general kinds of writers: outliners and discovery writers. Outliners know the story ahead of time and write it down and create outlines (this is what Brandon does). The other kinds, “discovery writers”, start writing and “discover” the story as they go. For discovery writers, a lot of the thrill comes from the discovery itself.
As a programmer, this resonates a lot with me. I tend to be a “discovery programmer”. I have an idea for code, and the thrill of writing the code and discovering the nuances of the idea are what excite me. I don’t tend to get very excited about shipping code, or even making a final, polished product. I love to explore ideas."
Well written - I always feel guilty about not shipping much code, but I love the excitement of the journey, not the destination ¯\_(ツ)_/¯