在OC中model类的属性大多如下设置(记得要根据需求换关键字,不是本篇重点)
@property (nonatomic, strong) NSString *name;
因为OC中属性为nil时并不会引发crash,当从服务器接收数据将字典转化为模型时,如果某些字段为空,在oc中直接[entity.name doSometing];也大多不会崩溃(有例外)
但是这条属性到了swift中就变成了这样
如果name为空时就会引发crash
这样的话,如果服务器接收的字段为NULL,赋值之后,在swift中只要调用entity.name!就回引发crash,因为不能给一个nil值强制解包.如果不修改model类的话,每次使用这个属性都需要
if let name = entity.name {
//执行赋值语句
}
//或者
guard let name = entity.name else {
return
}
//执行赋值语句
这样很啰嗦,因此我们需要在Objective-C中,将属性标上 nullable ,这样Swift中该属性变成了optional然后采用 if let 或者 guard let 来安全地拆包,某些属性也可以直接使用 entity.name? 也可以,解包时为nil也没关系,
网友评论