Unlike many other engineering disciplines, software "engineering" lacks a formal certification system and pretty much anyone who wants to label themselves a software engineer can (and will) do so.
So when you're sitting across from someone interviewing for a position you basically have no idea of their actual experience level or their depth of knowledge and training.
Do they know the language in question? Do they know the platform? The common SDKs? The common pitfalls?
And perhaps more to the point here, do they have a strong foundation? A solid grasp of basic algorithms and structures and design patterns?
If you're Apple or Microsoft or Google you're weeding through hundreds, if not thousands of candidates and as such you can afford to be picky about who you hire.
So given a choice between someone who can answer those difficult questions and who can demonstrate a good set of foundational skills.... and someone who can not...
Who would you hire?
Who's more likely to succeed?
The second candidate *may* be able to do the job... but why take the risk?