vy3*_*y32 0 reduce cgpoint swift
从正确的方式绘制以在Swift中的Array中找到max,我试图在Swift数组中找到最左边的位置reduce.我原以为这会起作用:
var a = [CGPoint(x:1,y:1),CGPoint(x:2,y:2),CGPoint(x:0,y:0)]
var leftMost = a.reduce(CGPoint(x:CGFloat.max,y:CGFloat.max)) {min($0.x,$1.x)}
Run Code Online (Sandbox Code Playgroud)
但是,我收到此错误:
`Type 'CGPoint' does not conform to protocol 'Comparable'
Run Code Online (Sandbox Code Playgroud)
当然,我不是在比较一个CGPoint,我正在比较一点.x,那应该是一个CGFloat.
想法?
数组成立CGPoint,而在reduce闭包中,你试图返回CGFloat- 你必须将它转换为CGPoint:
var leftMost = a.reduce(CGPoint(x:CGFloat.greatestFiniteMagnitude,y:CGFloat.greatestFiniteMagnitude)) {
CGPoint(x: min($0.x,$1.x), y: $0.y)
}.x
Run Code Online (Sandbox Code Playgroud)
我知道,错误信息没有多大帮助:)
实现相同结果的另一种方法是首先将点转换为x坐标,然后减少:
var leftMost = a.map { $0.x }.reduce(CGFloat.greatestFiniteMagnitude) { min($0,$1) }
Run Code Online (Sandbox Code Playgroud)
也许更容易阅读,虽然在性能方面可能更昂贵.但正如@MartinR所暗示的那样,它也可以简化为:
var leftMost = a.reduce(CGFloat.greatestFiniteMagnitude) { min($0, $1.x) }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1096 次 |
| 最近记录: |