Swift 面试题及其答案(2)

笔试面试2018-09-25才子老师

问题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()

相关推荐

猜你喜欢

大家正在看

换一换