This is how I understand it:
In Objective-C, all class instance variables are what would be called Optional in Swift, because all of them can potentially be nil.
I have found for myself it is better to think of Swift as adding "non-optionalness". Meaning, you can now declare that values will never be nil, and then not have to worry about checking if they are, or code silently failing. Although you can put in checks for this, it is not something that exists at compile time in Objective-C.
The "!" (implicityly unwrapped optional) was there mainly for compatibility with existing Objective-C libraries for convenience. Although many API calls could potentially return nil for some values, in practice the internal implementation prevented this from happening. By importing the call with the "!" modifier, this tells you that the value will not be nil, and also points out that nothing in the complier enforces that, and if it is nil for some reason the application will crash. This made things a lot less painful in the Swift code that uses those libraries.
The implicity unwrapped optional mostly becomes irrelevant as Objective-C APIs are annotated with the new nullability indicators introduced at WWDC, and the libraries can be accessed with simple optional/non-optional typing.