更新时间:2018-09-25 15:47作者:李天扬老师
varcity:String
init(fullAddress:String,city:String){
self.fullAddress=fullAddress
self.city=city
}
}
classPerson{
varname:String
varaddress:Address
init(name:String,address:Address){
self.name=name
self.address=address
}
}
varheadquarters=Address(fullAddress:"123TutorialStreet",city:"Appletown")
varray=Person(name:"Ray",address:headquarters)
varbrian=Person(name:"Brian",address:headquarters)
假设Brain搬家到街对面的建筑物里,那么你会这样更新他的地址:
brian.address.fullAddress="148TutorialStreet"
这样做将会发生什么?错误出在什么地方呢?
答案:Ray同样会搬家到新的建筑物里面。Address是一个引用类型类,所以无论你是通过ray或者brain访问headquarters,访问都是同一个实例化对象。headquarters对象的变化也会引起ray和brain的变化。你能想象如果Brain收到Ray的邮件或者相反Ray收到Brain的邮件,将会发生什么?解决方案是创建一个新的Address对象赋值给Brain或者把Address声明成为结构体而不是一个类。
中级
问题1–Swift2.0orlater
思考下面的代码:
varoptional1:String?=nil
varoptional2:String?=.None
答案:两者没有什么不同。Optional.None(简称.None)是optional变量值初始化的标准方法,而nil只是.None语法的一种修饰。事实上下面语句输出是正确的: