CGPoint 배열을 취하여 폴리 라인의 끝점으로 취급하고 중간 지점을 Catmull- Rom smoothing을 사용하여 이러한 점들을 통과하는 곡선의 근사값을 만듭니다.[CGPoint]에서만 작동하도록 배열에 제한된 확장을 만들 수 있습니까?
함수는 전역 함수로 정의 할 수 있습니다 :
func smoothPoints(array: [CGPoint], granularity: Int = 4) -> [CGPoint] {
return [CGPoint]() //Placeholder code for actual implementation
}
하지만 그것은 단지의 배열에 작동되도록 Array
종류에 제약 확장으로 정의 할 수 있도록하고 싶습니다 CGPoint
s. 그게 가능하니?
Swift 3에서 찾을 수 있었던 제한적인 확장의 유일한 예는 배열 요소를 특정 데이터 (Struct) 유형이 아닌 프로토콜을 준수하는 객체로 제한합니다.
extension Array where Element: CGPoint {
func smoothPoints(granularity: Int = 4) -> [CGPoint] {
}
}
을하지만 그것은 나에게 오류 "유형을 '요소'가 아닌 프로토콜 유형 'CGPoint'로 제한"제공 :
내가 같은 것을 할 수있을 것처럼 보인다.
선언
extension Array<CGPoint>
... 중 하나가 작동하지 않습니다.
특정 유형의 배열에서만 작동하는 Array 클래스의 확장을 정의 할 수있는 것처럼 보이지만이를 수행하는 방법을 알 수는 없습니다.
제가 스위프트 3에서 가능한 것을 시도하고 있습니까, 아니면 전 세계적인 기능을 고수하고 있습니까?
관련을 : [스위프트에 where 절을 사용하여 배열 유형을 확장 (http://stackoverflow.com/ q/31806324/2976878), [Swift에서 특정 유형의 배열을 확장하는 방법은 무엇입니까?] (http://stackoverflow.com/q/31842337/2976878). 가장 간단한 해결책은'Iterator.Element == CGPoint' 제약 조건 대신'Collection'을 확장하는 것입니다. – Hamish
구현이 O (1) 색인에 의존하는 경우에는 대신 'RandomAccessCollection'을 확장해야합니다. – Hamish