在 Swift 中枚举视图的 NSLayoutConstraints?

Posted

技术标签:

【中文标题】在 Swift 中枚举视图的 NSLayoutConstraints?【英文标题】:Enumerating a view's NSLayoutConstraints in Swift? 【发布时间】:2014-07-30 19:56:05 【问题描述】:
   [self.view.constraints enumerateObjectsUsingBlock:^(NSLayoutConstraint *constraint, NSUInteger idx, BOOL *stop) 
        if ((constraint.firstItem == view) && (constraint.firstAttribute == NSLayoutAttributeTop)) 
            constraint.constant = -200;
        
    ];

在 Objective-C 中,我将能够枚举视图的约束并相应地调整约束,但在 Swift 中,我很难找到等效的方法。

这是我在 swift 中应用代码的尝试:

   for (index, value) in enumerate(view.constraints()) 
        var constraint = value as NSLayoutConstraint
        if value.firstItem? = view  
            constraint.constant = -200;
        

    

我收到一个编译器错误,指出“Type '[AnyObject!'不符合此代码第一行的协议“序列”。

任何帮助将不胜感激!

【问题讨论】:

您在哪一行收到此错误? @reecon 第一行 - for (index, value) in enumerate(view.constraints()) 【参考方案1】:

由于constraints() 返回[AnyObject]!,这是可选的,因此您需要在使用前解开view.constraints()!。所以解开它使用下面的代码

    for (index, value) in enumerate(view.constraints()!) 
        var constraint = value as NSLayoutConstraint
        if value.firstItem? = view  
            constraint.constant = -200;
        

    

你也不能分配firstItem,因为它是只读属性。我想你想比较一下。所以使用if value.firstItem! as UIView == self.view。所以使用`

 for (index, value) in enumerate(view.constraints()!) 
        var constraint = value as NSLayoutConstraint
        if value.firstItem! as UIView == self.view 
            constraint.constant = -200;
        

    

【讨论】:

感谢您的回复,在您的代码中,我在 if value.firstItem? = view 行收到此编译器错误“无法分配给此表达式的结果” 已编辑答案。我认为您想使用比较` if value.firstItem!作为 UIView == self.view`

以上是关于在 Swift 中枚举视图的 NSLayoutConstraints?的主要内容,如果未能解决你的问题,请参考以下文章

Swift Core Data:Core Data 中的枚举 [重复]

在同一个枚举函数中调用 Swift 枚举案例

swift 在swift中使用枚举练习

swift 在swift中使用枚举的高级应用程序

Swift 枚举

Swift 学习- 09 -- 枚举