我将我的项目转换为Swift 3,我遇到以下代码时遇到问题,似乎这个(>>&gt ;-)不再用于Swift 3.什么是>>> ; - 实际意味着什么?以及如何在Swift 3中使用它?
fileprivate func addImageToView(_ view: UIView, image: UIImage?) -> UIImageView? {
guard let image = image else { return nil }
let imageView = Init(UIImageView(image: image)) {
$0.translatesAutoresizingMaskIntoConstraints = false
$0.alpha = 0
}
view.addSubview(imageView)
// add constraints
[NSLayoutAttribute.left, .right, .top, .bottom].forEach { attribute in
(view, imageView) >>>- { $0.attribute = attribute }
}
imageView.layoutIfNeeded()
return imageView
}
答案 0 :(得分:0)
>>>-
返回一个值。在Swift 3之前,如果你没有将函数或方法的返回值赋给任何东西,编译器就不会发出警告。从Swift 3开始,如果未使用函数或方法(包括运算符)的返回值,则会出现错误。库作者可以通过添加@discardableResult
注释来解决此问题,但与此同时,您必须将该行代码更改为:
let _ = (view, imageView) >>>- { $0.attribute = attribute }
答案 1 :(得分:0)
尽管这个答案可以解决你身边的问题,但是图书馆的作者仍然需要对他进行一些改变。
问题是因为swift完全删除了函数参数中的var
,并且某种程度上这种变化正在影响你在闭包中收到的参数。 (这对我来说似乎是个错误)。您需要弄清楚库传递给运算符闭包的inout
参数的类型是什么,并在调用中将其声明为inout
。让我们说类型是Constraint
(这可能与库不同),然后就是你:
(view, imageView) >>>- { (i : inout Constraint) in
i.attribute = attribute
}
但同样,作者可能仍需要对运算符实现进行一些更改。