// ---- @H_404_2@接触到一个新的属性定义:计算属性
//------@H_404_2@计算属性,要注意的一点就是,他只管计算,并不会保存数据。
//------UI@H_404_2@当中的应用场景,比如,我们赋给一个UI@H_404_2@控件一定的frame,@H_404_2@然后,我们就可以使用这个控件的bounds@H_404_2@和center,@H_404_2@我们自己并没有计算,而是直接就可以拿到的,所以人家内部是封装好了的。
class@H_404_2@ Circle{
var@H_404_2@ point: (Int@H_404_2@,Int@H_404_2@)
var@H_404_2@ radius: Float@H_404_2@
var@H_404_2@ perimeter: Float@H_404_2@{
get@H_404_2@{
return@H_404_2@ Float@H_404_2@(2@H_404_2@ * Float@H_404_2@(M_PI@H_404_2@) * radius@H_404_2@)
}
set@H_404_2@{
print@H_404_2@("@H_404_2@哈哈@H_404_2@"@H_404_2@)
}
}
init@H_404_2@(point: (Int@H_404_2@,Int@H_404_2@),radius: Float@H_404_2@){
self@H_404_2@.point@H_404_2@ = point
self@H_404_2@.radius@H_404_2@ = radius;
}
}
var@H_404_2@ circle = Circle@H_404_2@(point: (5@H_404_2@,5@H_404_2@),radius: 5.0@H_404_2@)
//@H_404_2@我们拿到内部的一个计算属性的值,并打印
print@H_404_2@(@H_404_2@circle.@H_404_2@perimeter)@H_404_2@
//@H_404_2@这里感觉是给这个计算属性赋值的感觉,但是其实,我们只是走了这个计算属性内部的一个setter@H_404_2@方法,虽然走了这个方法,但是perimeter@H_404_2@并不会自动存储这个值。
//@H_404_2@如果我们非要存储这个值,我们可以在内部定义一个属性var temp: Float?@H_404_2@,然后接收这个值。在setter@H_404_2@方法内部写一个 temp = newValue .@H_404_2@记住计算属性中用到的newValue @H_404_2@只能在他的setter@H_404_2@方法中写,你想,也只有setter@H_404_2@方法才会传一个新值进去。
circle.@H_404_2@perimeter = @H_404_2@38@H_404_2@
//@H_404_2@这里再次打印,验证一下,还是内部计算得出的那个结果。
// @H_404_2@另外计算属性,需要注意的一点是,如果在计算属性的内部,我们只写了get@H_404_2@方法,那么这个计算属性又成为了只读属性,也就是只能访问。