繁体   English   中英

如何在Swift扩展中声明NSLayoutConstraint类型的变量

[英]How do i declare a variable of type NSLayoutConstraint in an extension in swift

我已经为UIViewController创建了一个扩展,我想声明一些可以在整个扩展中使用的变量。 下面是我的代码

extension UIViewController {

var mssgTopConstraint1: NSLayoutConstraint?
var mssgTopConstraint2: NSLayoutConstraint?
var mssgIconTop1: NSLayoutConstraint?
var mssgIconTop2: NSLayoutConstraint?
var isCheviClicked: Bool = false

}

我有此错误扩展名,可能不包含所有五个变量的存储属性。

错误非常明显,您不能在扩展中添加存储的属性,只能使用计算的属性。

您可以UIViewController并在您的自定义类中声明这些属性:

class MyViewController: UIViewController {

    var mssgTopConstraint1: NSLayoutConstraint?
    var mssgTopConstraint2: NSLayoutConstraint?
    var mssgIconTop1: NSLayoutConstraint?
    var mssgIconTop2: NSLayoutConstraint?
    var isCheviClicked: Bool = false    
}

这是一种更干净的方法,因为用并非所有控制器都需要这些属性来扩展具有这些属性的UIViewController并不太有意义。

您可以实例化此新控制器,或将XIB / Storyboard中的类名称设置为MyViewController 这样,您可以使用新的控制器和新声明的属性。

在将变量声明为扩展名时,不要直接实现getter和setter方法,而必须创建一个holder,否则将在此处创建保留周期。

extension UIViewController {
struct Holder {
    static var contraint: NSLayoutConstraint = NSLayoutConstraint()
}

var actualVariable: NSLayoutConstraint {
    get {
        return Holder.contraint
    }
    set {
        Holder.contraint = newValue
    }
  }
}

快乐编码

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM