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 swift-users@swift.org https://lists.swift.org/mailman/listinfo/swift-users