Swift 面试题及其答案(4)

笔试面试2018-09-25李一老师

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语法的一种修饰。事实上下面语句输出是正确的:

相关推荐

猜你喜欢

大家正在看

换一换