2015-01-26 2 views
0

신속하게 generics를 사용하여 Vector3D 클래스 내의 변수를 초기화하려고합니다.변수 및 함수에 제네릭 적용 - Swift

Protocol 'Number' can only be used as a generic constraint because it has Self or associated type requirements

public protocol Number { 
    func +(l: Self, r: Self) -> Self 
}  
extension Double : Number {} 
extension Float : Number {} 


class Vector3D: NSObject { 

    var xCord: Number 
    var yCord: Number 
    var zCord: Number 


    func Vector3D(x: [Number], y: [Number], z: [Number]) { 
     self.xCord = x 
     self.yCord = y 
     self.zCord = z 
    } 
} 

내 질문은 다음, 어떻게 변수에 제네릭을 적용 할됩니다 :하지만, 내 변수에 프로토콜 '번호를'할당에 나는 다음과 같은 오류가 (그것은 두 번 중 하나를 만들거나 플로트합니다) 신속하고 기능적으로?

답변

1

이미 in this answer을 같이 당신은 스위프트의 변수에 제네릭을 추가 할 수 없습니다,하지만 당신은 그런 기능에 제네릭을 추가 할 수 있습니다 : 여기 <T> 만든 일반

func swapTwoValues<T>(inout a:T, inout b:T){ 
    let temporaryA = a 
    a = b 
    b = temporaryA 
} 

Check the apple Documentation.

1

합니다. 유형에 대한 변수와 같습니다. 유형을 어딘가에 사용하지 않는 한 원하는대로 T를 변경할 수 있습니다. 제한 조건 비트는 : Number입니다. T의 유형을 Number Protocol을 준수하는 유형으로 제한합니다.

func Vector3D<T: Number>(x: [T], y: [T], z: [T]) { 
    self.xCord = x 
    self.yCord = y 
    self.zCord = z 
} 

다른 대답에서 설명한 것처럼 변수 및 상수는 일반 유형 일 수 없습니다.