将泛型应用于变量和函数 - Swift

Applying Generics to Variables and Functions - Swift

我正在尝试在 swift 中使用泛型来初始化 Vector3D class 中的变量。但是,在将协议 'Number' 分配给我的变量(使其成为 Double 或 Float)时,我收到以下错误:

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
    }
}

我的问题是,如何将泛型应用于 swift 和函数中的变量?

您不能将泛型添加到 Swift 中的变量,如前所述 in this answer,但您可以像这样将泛型添加到函数中:

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

Check the apple Documentation.

泛型在此处创建 <T>。它就像类型的变量。您可以将 T 更改为您想要的任何内容,只要它不在某处用作 Type 即可。约束位是: Number。它将 T 的类型限制为遵守数字协议的类型。

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

如其他答案所述,变量和常量不能是通用类型。