I’have a protocol:
protocol Inertial {
func convexHull( _ t:AffineTransform? ) -> [CGPoint]
func area( _ t:AffineTransform? ) -> CGFloat
func firstOrderMomentums( _ t:AffineTransform? ) ->
(x:CGFloat,y:CGFloat)
func secondOrderMomentums( _ t:AffineTransform? ) ->
(xx:CGFloat,xy:CGFloat,yy:CGFloat)
}
I make [CPoint] (a poligon) conforms to the protocol:
extension Array : Inertial where Element == CGPoint {
func convexHull(_ t: AffineTransform?) -> [CGPoint] {
return ConvexHull.convexHull( points:self ).map { $0 * t }
}
func area(_ t: AffineTransform?) -> CGFloat {
return InertialUti.area( polig: self,t )
}
func firstOrderMomentums(_ t: AffineTransform?) -> (x: CGFloat, y: CGFloat)
{
return InertialUti.firstOrderMomentums( polig:self,t )
}
func secondOrderMomentums(_ t: AffineTransform?) -> (xx: CGFloat, xy:
CGFloat, yy: CGFloat) {
return InertialUti.secondOrderMomentums( polig:self,t )
}
}
and work like a charm.
Then I try to make [[CPoint]] (an array of poligons) conforms to the same
protocol:
extension Array : Inertial where Element == [CGPoint] {
var allVertexs : [CGPoint] {
return flatMap({$0})
}
func convexHull(_ t: AffineTransform?) -> [CGPoint] {
return ConvexHull.convexHull( points:allVertexs ).map { $0 * t }
}
func area(_ t: AffineTransform?) -> CGFloat {
return InertialUti.area( poligs: self,t )
}
func firstOrderMomentums(_ t: AffineTransform?) -> (x: CGFloat, y: CGFloat)
{
return InertialUti.firstOrderMomentums( poligs:self,t )
}
func secondOrderMomentums(_ t: AffineTransform?) -> (xx: CGFloat, xy:
CGFloat, yy: CGFloat) {
return InertialUti.secondOrderMomentums( poligs:self,t )
}
}
but this isn’t permitted: Redundant conformance of 'Array<Element>' to protocol
‘Inertial’ !
I think it's a severe limitation: array with different element’s type (i.e.
different specializations of the same generic type) should be treated as
distinct types and not as the same type.
_______________________________________________
swift-users mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-users