我正在尝试迁移第三方lib(通过Ramotion扩展集合)到swift 3。 我指出了一些瓶颈。
我有这个结构:
struct ConstraintInfo {
var attribute: NSLayoutAttribute = .left
var secondAttribute: NSLayoutAttribute = .notAnAttribute
var constant: CGFloat = 0
var identifier: String?
var relation: NSLayoutRelation = .equal
}
此运算符有一些重载:
precedencegroup ComparisonPrecedence { 结社性:左 higherThan:LogicalConjunctionPrecedence }
infix operator >>>- : ComparisonPrecedence
func >>>- <T: UIView> (left: (T, T), block: (_: inout ConstraintInfo) -> ()) -> NSLayoutConstraint {
var info = ConstraintInfo()
block(&info)
info.secondAttribute = info.secondAttribute == .notAnAttribute ? info.attribute : info.secondAttribute
let constraint = NSLayoutConstraint(item: left.1,
attribute: info.attribute,
relatedBy: info.relation,
toItem: left.0,
attribute: info.secondAttribute,
multiplier: 1,
constant: info.constant)
constraint.identifier = info.identifier
left.0.addConstraint(constraint)
return constraint
}
这个方法在UIView扩展中:
func addScaleToFillConstratinsOnView(_ view: UIView) {
[NSLayoutAttribute.left, .right, .top, .bottom].forEach { attribute in
(self, view) >>>- { $0.attribute = attribute } // this line is erroring
}
}
错误说:
“'&gt;&gt;&gt; - '生成'NSLayoutConstraint',而不是预期的上下文结果类型'Void'(又名'()')”
我将错误行更改为
var _: NSLayoutConstraint = (self, view) >>>- { $0.attribute = attribute }
现在我得到了:
表达式类型'()'不含更多上下文
是不明确的
另外,如果我写:
$0.attribute as! NSLayoutAttribute = attribute as! NSLayoutAttribute
我遇到了不变性错误。
我错过了什么?
答案 0 :(得分:0)
在我的情况下,我这样解决了:
[NSLayoutAttribute.left, .right, .centerY].forEach { attribute in
_ = (view, collectionView) >>>- {
var _: ConstraintInfo = $0
$0.attribute = attribute
}
}