更新时间:2018-09-25 15:47作者:王华老师
问题2–Swift1.0orlater
思考下面的问题:
structTutorial{
vardifficulty:Int=1
}
vartutorial1=Tutorial()
vartutorial2=tutorial1
tutorial2.difficulty=2
tutorial1.difficulty和tutorial2.difficulty的值分别是多少?假如Tutorial是一个类,会有什么不同?并说明原因。
答案:tutorial1.difficulty的值是1,然而tutorial2.difficulty的值是2.
在Swift中结构体是值类型,他们的值是复制的而不是引用的。下面的一行代码意思是复制了tutorial1的值并把它赋值给tutorial2:
vartutorial2=tutorial1
从这一行开始,tutorial2值得改变并不影响tutorial1的值。
假如Tutorial是一个类,tutorial1.difficulty和tutorial2.difficulty的值将都会是2.在Swift中类对象都是引用类型。tutorial1属性的任何改变将会反应到tutorial2上,反之亦然。
问题3–Swift1.0orlater
view1声明成var类型,view2声明let类型。这里有什么区别吗?下面的最后一行代码能编译吗?
importUIKit
varview1=UIView()
view1.alpha=0.5
letview2=UIView()
view2.alpha=0.5//Willthislinecompile?
答案:view1是个变量可以重新赋值给一个新的实例化的UIView对象。使用let你只赋值一次,所以下面的代码是不能编译的:
view2=view1//Error:view2isimmutable
但是UIView是一个引用类型的类,所以你可以改变view2的属性,也就是说最后一行代码是可以编译的:
letview2=UIView()