我觉得这可能是一个非常简单的问题,因为我刚刚开始使用Swift,但我对这种行为感到有点困惑。
我有一个NSLayoutConstraint,如下所示:
let verticalConstraint = NSLayoutConstraint(item: newView,
attribute: NSLayoutAttribute.CenterY,
relatedBy: NSLayoutRelation.Equal,
toItem: view,
attribute: NSLayoutAttribute.CenterY,
multiplier: 1,
constant: 0)
并且工作正常。当我将其更改为
时class ViewController: UIViewController {
let newView = UIView()
var verticalStartingPoint = 0
override func viewDidLoad() {
super.viewDidLoad()
newView.backgroundColor = UIColor.blueColor()
newView.setTranslatesAutoresizingMaskIntoConstraints(false)
view.addSubview(newView)
// not the part that is problem
let horizontalConstraint = NSLayoutConstraint(item: newView,
attribute: NSLayoutAttribute.CenterX,
relatedBy: NSLayoutRelation.Equal,
toItem: view,
attribute: NSLayoutAttribute.CenterX,
multiplier: 1,
constant: 0)
view.addConstraint(horizontalConstraint)
var verticalConstraint = NSLayoutConstraint(item: newView,
attribute: NSLayoutAttribute.CenterY,
relatedBy: NSLayoutRelation.Equal,
toItem: view, attribute: NSLayoutAttribute.CenterY,
multiplier: 1,
constant: self.verticalStartingPoint // <- seems to be error
)
view.addConstraint(verticalConstraint)
它给出了一个错误说明:
/Users/jt/tmp-ios/autolayout-test/autolayout-test/ViewController.swift:31:30: 找不到类型&#39; NSLayoutConstraint&#39;的初始值设定项。接受 类型&#39;的参数列表(项目:UIView,属性:NSLayoutAttribute, relatedBy:NSLayoutRelation,toItem:UIView!,属性: NSLayoutAttribute,乘数:Int,常数:Int)&#39;
但我不确定为什么?在这种情况下,我似乎只是在分配一个变量。
答案 0 :(得分:3)
Swift不会自动将soundEffect.Play();
类型的变量转换为nameOfSoundFile
类型的变量。你必须明确转换:
Int
Swift会自动将数字整数文字(如“CGFloat
”)转换为任何数字类型。这就是你第一次尝试的原因。
您可以更改变量的类型,而不是将调用转换为var verticalConstraint = NSLayoutConstraint(item: newView,
attribute: NSLayoutAttribute.CenterY, relatedBy: NSLayoutRelation.Equal,
toItem: view, attribute: NSLayoutAttribute.CenterY,
multiplier: 1, constant: CGFloat(self.verticalStartingPoint))
:
0