But the term typecast means to convert to something else, your casting to something different. This is more of a reminder to the UIView what it is a UILabel?
Typecasting does not convert anything. It tells the compiler "Trust me, I know what I'm doing."
Think about this.
A view controller has a content view. The content view can contain a variety of subviews. Labels, switches, buttons, whatever. Those subviews can have tags if you want.
All of the objects you can add to a view controller's content view will be "subclasses" of UIView. They'll be UIView objets that also have other custom behaviors and features. Buttons can be clicked. Labels display text. Text fields can manage user-edited text. Switches can let the user choose an on or off state. Segmented controls let the user choose from one of several values. UIPicker objects let the user pick from a variety of different values, or even pick several different values. Etc, etc. All these things are UIView objects with additional custom behaviors.
The method viewWithTag simply searches for a subview of the current view with a tag that matches the number you are asking for. The method doesn't care what kind of view object it is. It just treats it as a vanilla UIView Object. It might be a vanilla UIView, or it might be a button, or a switch, or something else.
Since that method can't know which kind of object it's going to return, it just returns a pointer of type UIView. The object it's returning will be a UIView object or some subclass of UIView.
If the object is a subclass of UIView and you know what type it is, you can use type casting to tell the compiler "I know you don't know what kind of view object this is, but I do. Trust me, its a UILabel".
If you're wrong, and you try to set the text of the object, but it's really a UISwitch, you will crash, because a UISwitch does not have a text property. Essentially you lied to the compiler, so now your program dies.