将值赋给只读计算属性

时间:2016-03-13 13:03:03

标签: swift

大家。我正在学习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来尝试为结构或类赋值,但它没有用。

这个功能如何运作?

谢谢!

3 个答案:

答案 0 :(得分:1)

是的,l是计算属性。您无法为其分配值。但它会返回一个CALayer的实例,您可以修改它。因此,您可以修改backgroundColorborderWidth和其他属性。

答案 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是结构,那么您将无法更改此变量的任何属性。