For several years I've wanted to learn Swift. Sure, I've written a few small apps using it, but I wouldn't consider myself proficient with the language. I know enough to get by. But, there are just too many things I need to dig deeper on, like the intricacies of closures, the seemingly strange need to make everything a struct and the mystery of retain cycles (strong, weak, unowned...what?).
While there are many online resources available to learn Swift (videos, courses, ebooks, etc), I still default to my own tried and true method of learning a new language and it involves the ancient practice of reading books, like, the ones with actual pages made from trees. I don't have a good reason for why I prefer to learn languages from books, but it works for me. A stack of thick, heavy, programming books is where it all started for me back in 2001 (Wrox Press, anyone?).
Currently I'm reading Swift Programming - The Big Nerd Ranch Guide. I bought this book a few years ago (2nd edition) but never really dug into it. I believe it's based on Swift 3, but the example code is just fine so far even though we're now using Swift 5. The people who wrote this book know how to teach and it's been great. I'm a little more than half way done and I'm learning a lot. The authors cover the basics in a way that makes sense with good examples.
I also bought Swift in Depth because once I get the basics from the first book, I want learn more about the advanced concepts and the swifty way of doing things as it's often referred to. In C#, we do certain things that aren't necessarily required, but most C# developers adhere to them, like prefixing private member variables with an underscore. It's this sort of thing I want to learn about in the Swift world. Also, I want to understand protocol oriented development, generics and other patterns. This book seems to cover that stuff and more. I'm looking forward to getting into this book soon.
Learning from a book can feel daunting. There's so much in there, so many pages and examples to type out. How does anyone learn this way? For me, it's simple. I just power through the whole book, slowing down on certain concepts to go in depth on things that are new or interesting, then I keep moving. I do very few of the exercises. My goal in the first pass at a book is to read the whole thing so I know what the language has to offer. The goal is to create a subconscious inventory of the language features to draw from later.
After I finish my complete read-through, I go back to the topics that I feel will be important to understand and read about those topics again and do the coding exercises. I feel like this method saves a lot of time. I don't want to get bogged down learning about something like class methods in Swift because I don't feel like I'll need them very often, but I know they're available from my first pass of the book and if I need to know more about them later, I can go back and dig deeper. I would rather spend more time learning about the things I know I'll use frequently like why structs are good, why weak self is so often used in closures and how to unwrap optionals.