Objective-C provides a facility to work at compile time with nullability and optionals. While it's not as powerful as Swift optionals, it still provides a decent amount of safety for pure Objective-C programs. Lastly, it can be used to better interoperate with Swift.
Let's first consider this simple Objective-C interface:
@interface AnObject: NSObject @property (nonatomic, copy) NSString* string; @end
This is exposed in Swift as the following:
class AnObject: NSObject { var string: String! }
As you might notice, the string is a forced unpacked string, but this is unlikely what you would expect. Before Swift 4, the following code was valid but would crash at runtime:
// Swift 3 let object = AnObject() let string = object.string // String! string.appendContentsOf("SwiftObject") // fatal error: unexpectedly found nil while unwrapping an Optional value
Starting with Swift 4, however, the forced unpack optionals have not been accessible without using the ...