Swift:如何转换闭包参数?

3
以下代码会导致编译器错误:找不到成员"Left"
let indexOfConstraint = constraints.indexOfObjectPassingTest { (constraint, idx, stop) in
    return constraint.firstAttribute == .Left
}

.Left之前添加NSLayoutAttribute可以修复错误,但有没有一种方法将constraint转换为NSLayoutConstraint

例如,在Objective-C中,我可以在指定参数时对constraint进行转换。

NSUInteger indexOfConstraint = [constraints indexOfObjectPassingTest:^BOOL(NSLayoutConstraint *constraint, NSUInteger idx, BOOL *stop) {
    return constraint.firstAttribute == NSLayoutAttributeLeft
}];

1
你试过(constraint as NSLayoutConstraint).firstAttribute吗? - Oxcug
是的,我想那是最好的选择。在提出这个问题后,我意识到那是有效的。 - ma11hew28
1个回答

7

您可以使用括号进行强制类型转换:

let indexOfConstraint = constraints.indexOfObjectPassingTest { (constraint, idx, stop) in
    return (constraint as NSLayoutConstraint).firstAttribute == .Left
}

这可能比仅使用NSLayoutAttribute.Left更难看。

好的,我想我会坚持后者。谢谢! :-) - ma11hew28

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接