swift lazy var使用常量

时间:2015-12-07 10:43:16

标签: ios swift

我有许多按钮具有相同的size,我想从懒惰变量设置常量宽度,我应该怎么做? JRTopView.buttonWidthbuttonWidth都无法正常工作。

  class JRTopView: UIView {
        let buttonWidth:CGFloat = 150
        lazy var leftButton: UIButton! = {
            let btn = UIButton(type: UIButtonType.Custom)
            btn.backgroundColor = UIColor.greenColor()
            btn.frame = CGRectMake(-30, 30, JRTopView.buttonWidth, buttonWidth)
            return btn
        }()
        lazy var rightButton: UIButton! = {
            let btn = UIButton(type: UIButtonType.Custom)
            btn.backgroundColor = UIColor.greenColor()
            btn.frame = CGRectMake(-30, 30, JRTopView.buttonWidth, buttonWidth)
            return btn
        }()
    }

谢谢!

编辑: 有趣的是,如果我使用self.buttonWidth,它可以在leftButton中使用,但不能在rightButton中使用。{{1}}。 enter image description here

2 个答案:

答案 0 :(得分:2)

由于buttonWidth是一个实例属性,因此访问它的唯一方法是通过JRTopView的实例。

如果您在本课程之外,您可以创建新实例并执行yourInstance.buttonWidth,如果您在课堂内,则可以buttonWidth/self.buttonWidth

但是,对于JRTopView的所有实例来说,作为一个常量具有相同值的常量,将它提升到类级别会更有意义:

static let buttonWidth:CGFloat = 150

这应该允许你JRTopView.buttonWidth

答案 1 :(得分:1)

这是在Xcode 7.1中构建的

class JRTopView: UIView {
    let buttonWidth:CGFloat = 150
    lazy var leftButton: UIButton! = {
        let btn = UIButton(type: UIButtonType.Custom)
        btn.backgroundColor = UIColor.greenColor()
        btn.frame = CGRectMake(-30, 30, self.buttonWidth, self.buttonWidth)
        return btn
    }()
    lazy var rightButton: UIButton! = {
        let btn = UIButton(type: UIButtonType.Custom)
        btn.backgroundColor = UIColor.greenColor()
        btn.frame = CGRectMake(-30, 30, self.buttonWidth, self.buttonWidth)
        return btn
    }()
}