官术网_书友最值得收藏!

Nullability and optionals in Objective-C

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 ? operator:

// Swift 4
let object = AnObject()
let string = object.string // String!
string?.appending("SwiftObject") // safe to use

While this works properly and is now quite safe to use, this is often not what we expect to expose. Most of our objects don't have optional properties.

主站蜘蛛池模板: 平潭县| 仙游县| 吉首市| 阳高县| 高邑县| 苍南县| 博客| 元氏县| 双柏县| 台山市| 东山县| 屯留县| 北流市| 洛宁县| 乐山市| 汤原县| 保德县| 芒康县| 正安县| 同江市| 合水县| 化州市| 介休市| 云安县| 且末县| 高邑县| 黎平县| 保定市| 登封市| 通化市| 巫山县| 敦化市| 东源县| 林周县| 股票| 南华县| 日喀则市| 仪征市| 龙江县| 安远县| 淮安市|