Hello!
So, I don't really have conclusions here, but I'll throw thoughts around. For some background to where I'm coming from with my thoughts, I work primarily as an iOS developer, although I also touch Android, serverside and web code from time to time at the company. I have a master's degree in computer science, specialising in cryptography and programming languages.
First off, my immediate thought is that if your primary motivation is just to not do what you're currently doing, and think software development is just a way out that you can teach yourself, then you'd probably always be at the bottom of my list of potential hires, almost no matter how much you learn. On the other hand, if you come to this with a genuine passion and interest for computing, software and code, then you could jump a few tiers above others who may know more out of the gates. Getting out of retail is a fine subgoal, but you also need to not just be driven away from retail, but towards software engineers. Otherwise, there's probably better other paths.
Unlike the other comments here, I frankly think Swift is a perfectly fine starting language. Something Swift does really well is progressive disclosure of information. That is, you do not need to understand the whole language to start doing cool things. You can know a little, use it, learn a little more, use it, and so forth. Some languages, like Java, that is often used as a starting language at universities, has a lot more you need to know to even have a program start at all. With Swift, simply writing
print("Hello World")
and nothing else in a main.swift file, is a full program you can run. All you need to know to fully understand the contents of the program is what a function call is and what a string is. Of course there's always more to learn surrounding how it goes from that text to something that executes, but the contents of the Swift file are that easy to get going with. In Java, at least in older versions of Java, you needed something like
class MainRunner {
public static void main(String args[]) {
System.out.println("Hello World");
}
}
There is so much more going on that you have to question or at first just accept not understanding. What's a class, what's static, what's public, void, [], etc.
In Swift you can learn these things little by little.
Many other programming languages, like Swift, have progressive disclosure of complexity. Python and JavaScript are also options that have similar initial complexity, although I personally despise Python for anything that grows more complex than ~150 lines.
I don't believe in learning a specific target though. I don't think there's much point in learning iOS app development with Swift as an example. Or Web Dev with React and JS, or any other specific combination of technologies. Instead learn fundamentals. Learning fundamentals *through* app development with Swift is perfectly fine. Just not focusing on learning just that specifically. Always keep asking how and why. There are for example many differences between iOS and Android development. But for either platform, if you ask "How do they do that?" and "Why do they do that?" enough, you eventually get to a common foundation. Sometimes different design decisions were made to serve the same fundamental goal with different implementations and caveats, but understanding the foundations in one places makes you quickly able to understand the higher level abstractions and reasons for why they might behave the way they do on a different target.
I always say I know all programming languages. Not because I know them already, but because I know how the machine works, I know how compilers parse and transform higher level code to machine code, and I know all the common patterns. There are some really esoteric stuff out there, but if you give me a grammar description, I can write it. I know my boss agrees that this is the more valuable skill than being a hyper specialist in a specific framework.
I think programming is great to know in some capacity almost regardless of what job you have. Even if you do't get a gig as a programmer, any skills you have in automating tasks can aid you in other positions that can laterally move you into more software oriented positions in companies.
It's hard to speculate in fluctuations in markets. I can't speak to supply and demand in the software engineering hiring markets, especially not in the US. Here in Denmark it seems fine and aside from game development studios, I don't know of any issues getting jobs among software developers (although game positions are doing badly).
Speaking more generally however, every couple of years, since like the 50s, the amount of programmers in the world has doubled. I think it was every 7 years it doubled, but I'm going from memory based on a talk I saw like 3 years ago. That's not just the supply of programmers growing rapidly, but the demand too. If there's a downturn in the industry I think it's a blip. Some seniors flood the market making them more attractive hires if they're not too much more expensive than juniors assuming they struggle finding high paying gigs, but eventually it evens out and the demand grows rapidly again.
I definitely think there's room for self-taught individuals. But for software engineering positions I also think it's important not just to be a 'coder', but instead being an engineer and a 'programmer'. May seem like synonyms but there's a distinction to me. Anyone writing code is a coder. But a programmer and an engineer will have a firm grasp on architecture, both at the macro and micro level and can weigh the consequences of different technical design decisions as well as talk about commonly understood pattens in the lingo. This will include knowing the delegate pattern, MVC and MVVC, dependency injection, singletons, decorators, etc. There are books that will teach all of this, and at an interview, speaking the lingo can matter. Software engineering is a culture, and if you're in a technical interview, understanding the culture will help the interviewer in knowing your applicability faster.
A lot of what I talk about is only relevant a long time after you get over the beginning stages, but I want to make it clear that being a programmer is about a lot more than writing code. The early starting out experiences, aren't that comparable to what it's like writing code later in the process. This can make it hard to evaluate if it's something you're going to enjoy when you're starting out. In the early process of learning, you'll mainly be learning syntax and magical words that mean special things. While later your focus will shift to bigger picture architecture. The common passion that exists, that you can evaluate from day one, is the process of discovery and learning. This will be a constant throughout a programmer's career. Whether it's the high level of learning a new paradigm or framework or language or whatever, or the micro level of discovering the true source of a logic bug, as you step through the code with a debugger - on the surface everything looks fine, but then you discover that sneaky edge case. You must love being a detective
If you want to do this, I also strongly advise getting a mentor or at least just someone who knows programming to talk to. Talking about it all is a great way to accelerate and cement learning.