大家。我正在学习swift和Xcode。并遵循此https://www.raywenderlich.com/90488/calayer-in-ios-with-swift-10-examples 学习。我按照每一步去做。但是我看到了这段代码:
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var viewForLayer: UIView!
var l: CALayer {
return viewForLayer.layer
}
override func viewDidLoad() {
super.viewDidLoad()
setUpLayer()
}
func setUpLayer() {
l.backgroundColor = UIColor.blueColor().CGColor
l.borderWidth = 100.0
l.borderColor = UIColor.redColor().CGColor
l.shadowOpacity = 0.7
l.shadowRadius = 10.0
}
}
显然,l
是只读计算属性。
那么setUpLayer()
如何将值分配给1
?
我使用playground来尝试为结构或类赋值,但它没有用。
这个功能如何运作?
谢谢!
答案 0 :(得分:1)
是的,l
是计算属性。您无法为其分配值。但它会返回一个CALayer
的实例,您可以修改它。因此,您可以修改backgroundColor
,borderWidth
和其他属性。
答案 1 :(得分:1)
l
只返回viewForLayer.layer
。该教程指出:
这段代码的第一件事是创建一个名为的计算属性 “l”(这是一个小写的L)来访问viewForLayer的图层 在编写后续代码时保存一些按键。
所以setUpLayer
中发生的事情基本上是:
viewForLayer.layer.backgroundColor = UIColor.blueColor().CGColor
viewForLayer.layer.borderWidth = 100.0
viewForLayer.layer.borderColor = UIColor.redColor().CGColor
viewForLayer.layer.shadowOpacity = 0.7
viewForLayer.layer.shadowRadius = 10.0
这是合法的快速。
答案 2 :(得分:0)
您需要了解reference types
(类)和value types
(枚举,结构)之间的区别。阅读本文以获取更多信息:Classes and Structures
长话短说:
CALayer
是一个类,因此l
引用此类的实例。
如果l
是结构,那么您将无法更改此变量的任何属性。