gpt4 book ai didi

ios - NSLayoutConstraint 并分配一个 int 变量

转载 作者:搜寻专家 更新时间:2023-10-31 22:22:36 24 4
gpt4 key购买 nike

我觉得这可能是一个非常简单的问题,因为我刚刚开始使用 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: Cannot find an initializer for type 'NSLayoutConstraint' that accepts an argument list of type '(item: UIView, attribute: NSLayoutAttribute, relatedBy: NSLayoutRelation, toItem: UIView!, attribute: NSLayoutAttribute, multiplier: Int, constant: Int)'

但我不确定为什么?在这种情况下,我似乎只是在分配一个变量。

最佳答案

Swift 不会自动将类型为 Int 的变量转换为类型为 CGFloat 的变量。您必须明确转换:

var verticalConstraint = NSLayoutConstraint(item: newView,
attribute: NSLayoutAttribute.CenterY, relatedBy: NSLayoutRelation.Equal,
toItem: view, attribute: NSLayoutAttribute.CenterY,
multiplier: 1, constant: CGFloat(self.verticalStartingPoint))

Swift 会自动将数字整数字面量(如“0”)转换为任何数字类型。这就是您第一次尝试成功的原因。

您可以更改变量的类型,而不是在对 NSLayoutConstraint 的调用中进行转换:

var verticalStartingPoint: CGFloat = 0

关于ios - NSLayoutConstraint 并分配一个 int 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30966631/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com