ios - 无法将 'NSLayoutConstraint' 类型的不可变值作为 inout 参数传递

标签 ios swift nslayoutconstraint inout

我尝试重新分配一个引用 NSLayoutConstraint。

class ViewController: UIViewController {
    @IBOutlet weak var myConstraint: NSLayoutConstraint!

    override func viewDidLoad() {
        super.viewDidLoad()
        exchangeConstraint(&myConstraint)
    }
}

extension UIViewController {
    func exchangeConstraint(_ constraint: inout NSLayoutConstraint) {
        let spacing = constraint.constant
        view.removeConstraint(constraint)
        constraint = view.topAnchor.constraint(equalTo: anotherView.topAnchor, constant: spacing)
        view.addConstraint(constraint)
    }
}

但这里它给了我错误:

exchangeConstraint(&myConstraint)
-------------------^
Cannot pass immutable value of type 'NSLayoutConstraint' as inout argument

我不明白的是为什么它说不可变值,而约束被声明为变量,而不是常量。

最佳答案

我通过简单地将 constraint 参数声明为显式展开的 NSLayoutConstraint 来解决它。

func exchangeConstraint(_ constraint: inout NSLayoutConstraint!) {
    ...
}

更新

这是我使用它的一个项目:https://github.com/truffls/compatible-layout-anchors-ios

关于ios - 无法将 'NSLayoutConstraint' 类型的不可变值作为 inout 参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47670388/

相关文章:

ios - LinearGravityField() 不影响场景 SceneKit 中的物理体

ios - 在 iOS 中出现键盘时启用滚动内容

ios - 自动布局约束没有得到尊重

swift - 使用视觉格式语言 (Swift) 创建三列

ios - UIPickerView 宽度约束问题

iphone - UIView 可以知道它何时出现在屏幕上吗

ios - 如何在 Xamarin iOS 中为 UITableViewCell 从底部到顶部的过渡设置动画?

swift - Firebase 2,访问快照中的子值会产生空值

ios - 在自动布局中将 subview 的 X 居中抛出 "not prepared for the constraint"

ios - 通过 iOS 应用程序以编程方式断开通话