可选链接解包错误

时间:2017-01-12 14:44:18

标签: swift

class Ppl{
    var residence:Residence?
}
class Residence{
    var addr="Default place"
}
var ppl=Ppl()
ppl.residence!=Residence() 

// I put a unexpected exclamation mark after residence
// until now it should return no error but if I put below line

var someaddr=ppl.residence?.addr
  

错误:执行被中断,原因:EXC_BAD_INSTRCTION(代码= EXC_1386_INVOP,子代码= 0x0)。

2 个答案:

答案 0 :(得分:1)

只需将ppl.residence!=Residence()替换为ppl.residence = Residence()

答案 1 :(得分:0)

变量ppl的实例为Ppl,因为您已使用此var ppl=Ppl()创建了一个实例。但是在Ppl的实现中,您已将residence声明为可选变量而不创建实例。因此,当您访问ppl.residence!(带有感叹号)标记时,首先会打开可选项。即使在为其分配Residence的实例之前,这也会为您提供零值。只需用ppl.residence = Residence()替换该行,它就可以正常工作。