Swift 3 - 这是什么意思?

时间:2016-09-21 21:30:14

标签: swift swift3

我将我的项目转换为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

}

2 个答案:

答案 0 :(得分:0)

>>>-返回一个值。在Swift 3之前,如果你没有将函数或方法的返回值赋给任何东西,编译器就不会发出警告。从Swift 3开始,如果未使用函数或方法(包括运算符)的返回值,则会出现错误。库作者可以通过添加@discardableResult注释来解决此问题,但与此同时,您必须将该行代码更改为:

let _ = (view, imageView) >>>- { $0.attribute = attribute }

答案 1 :(得分:0)

尽管这个答案可以解决你身边的问题,但是图书馆的作者仍然需要对他进行一些改变。

问题是因为s​​wift完全删除了函数参数中的var,并且某种程度上这种变化正在影响你在闭包中收到的参数。 (这对我来说似乎是个错误)。您需要弄清楚库传递给运算符闭包的inout参数的类型是什么,并在调用中将其声明为inout。让我们说类型是Constraint(这可能与库不同),然后就是你:

(view, imageView) >>>- { (i : inout Constraint) in
     i.attribute = attribute
}

但同样,作者可能仍需要对运算符实现进行一些更改。