9 Principles of Ultra Learning
Here’s an improved format for better readability, with clear headings, bullet points, and examples for each ultralearning principle: Daily Routine for Applying Ultralearning Principles To effecti...
Here’s an improved format for better readability, with clear headings, bullet points, and examples for each ultralearning principle: Daily Routine for Applying Ultralearning Principles To effecti...
I see lots of SwiftUI comments about how it’ll “force” developers to write “Pyramids of Doom” with heavily nested code, which is just as false as MVC forcing developers to build massive view contro...
Every year during WWDC, we in the Apple developer community are presented with a whole suite of new tools, APIs and technologies that we can use to further improve our apps along with the systems t...
SwiftUI ships with 3 main stack types - that enables you to easily align content on either the X, Y, or Z axis. And, since all SwiftUI views are composable, they can also be nested in order to buil...
You can definitely mix and match SwiftUI with UIKit/AppKit, which means that you can adopt it gradually. Any SwiftUI hierarchy can be embedded in a view controller, and UIKit views can be retrofit...
There is no doubt in my mind that SwiftUI is a complete game changer. This is all the code you need to define a UI that has: A navigation controller A table view Cell configuration Label f...
Launch arguments are probably most commonly used as input to command line tools. While Swift can be a great language for creating command line tools, let’s take a look at how we can also use the p...
I love to struct my code using extensions in Swift. One big benefit of doing so when it comes to struct initializers, is that defining a convenience initializer doesn’t remove the default one the c...
When developing new features for an app, it can be really useful to have some form of mechanism to gradually roll out new implementation & functionality, instead of having to launch to every si...
Swift’s @autoclosure attribute enables you to define an argument that automatically gets wrapped in a closure. It’s primarily used to defer execution of a (potentially expensive) expression to when...