Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 为什么在Swift中以编程方式声明约束时会出现错误?_Ios_Swift_Constraints - Fatal编程技术网

Ios 为什么在Swift中以编程方式声明约束时会出现错误?

Ios 为什么在Swift中以编程方式声明约束时会出现错误?,ios,swift,constraints,Ios,Swift,Constraints,我在名为Home的UIViewController类中声明一个约束。下面是代码的样子: class Home: UIViewController { @IBOutlet weak var buttonUpgrade: UIButton! var constraint = NSLayoutConstraint (item: buttonUpgrade, attribute: NSLayoutAttribute.Bottom, relatedBy: NSLayoutRelation.Equa

我在名为
Home
UIViewController
类中声明一个约束。下面是代码的样子:

class Home: UIViewController {

@IBOutlet weak var buttonUpgrade: UIButton!

var constraint = NSLayoutConstraint (item: buttonUpgrade, 
attribute: NSLayoutAttribute.Bottom, 
relatedBy: NSLayoutRelation.Equal, 
toItem: self.view, 
attribute: NSLayoutAttribute.Bottom, 
multiplier: 1, 
constant: 500)

...
}
但是,我遇到了以下错误:
Home.type没有名为buttonUpgrade的成员
。为什么?


您可以从这里下载项目:。

如前所述,您不能在函数外编写此类代码。但您可以这样声明变量全局(在函数外部):

var constraint:NSLayoutConstraint!
然后,您可以在您的
viewDidLoad
-方法中对其进行初始化,该方法将被调用一次:

constraint = NSLayoutConstraint (item: buttonUpgrade, 
attribute: NSLayoutAttribute.Bottom, 
relatedBy: NSLayoutRelation.Equal, 
toItem: self.view, 
attribute: NSLayoutAttribute.Bottom, 
multiplier: 1, 
constant: 500)

完成此操作后,可以从类中的任何位置访问约束变量。只需确保变量在使用前已填充。

代码需要在方法中。您没有注意到viewDidLoad中有相同的代码,并且该代码不会给您带来错误吗?是的,我注意到了。谢谢你的评论。如果我可以为
NSLayoutConstraint
变量
var constraint
设置一个全局变量,以避免任何错误,例如
无法同时满足约束
,这将非常有用。事实上,如果我试图声明另一个时间
var约束
,并为其
常量
分配一个新值,我就会收到该错误。非常感谢您的帮助。我不确定您的意思,但您可以在文件顶部为约束创建一个属性var constraint:NSLayoutConstraint。然后,在viewDidLoad(或其他任何地方)中创建约束时,只需使用self.constraint=。。。(实际上,您甚至不需要Swift中的“self”,但我仍然喜欢使用它)。问题是
约束的初始化取决于同一类的其他属性。可能重复或(使用不同的解决方案)。@rdelmar这是个好主意!非常感谢。但是我如何告诉编译器约束具有
属性:nslayouttribute.Bottom