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

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.

主站蜘蛛池模板: 沙洋县| 县级市| 梁河县| 潮安县| 泾阳县| 民乐县| 云林县| 格尔木市| 辛集市| 论坛| 博客| 县级市| 普格县| 台山市| 大冶市| 体育| 海丰县| 四平市| 五峰| 师宗县| 华容县| 且末县| 余干县| 文安县| 柳州市| 循化| 高尔夫| 石棉县| 虎林市| 通道| 安福县| 洛浦县| 昌乐县| 图木舒克市| 黄龙县| 锡林郭勒盟| 邢台市| 涟源市| 开平市| 汝南县| 西平县|