You may have answered your own question. In simple applications, you can send a message to the console via a print() statement. But if you want to sell this application, your user won't be able to see the message on their iPhone!
Throwing an error gives you a specific set of error messages that you can intercept, and respond appropriately to. For example, what do you DO if someone enters a postal code that doesn't have enought characters? What if the postal code is valid for England, but not for Germany?
In these cases, you might develop a number of enums that define different types of error codes. PostalCode.tooShort, PostalCode.tooLong, PostalCode.missingCountryCode, and more.
When you CATCH these thrown codes in your application, you can then perform extra logic to alert your user. Do you want to turn a field RED? Do you want to display an alert, play a sound ? Maybe you want to refetch data from your applications database.
What you do when you CATCH an error is the heart of your application's business logic. The THROW / CATCH pattern gives you a clean way to define typical, expected errors and the respond to them appropriately.