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

时间:2015-01-26 23:01:30

标签: ios generics swift protocols nsobject

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

  

协议'Number'只能用作通用约束,因为它   有自我或相关的类型要求

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和函数中将泛型应用于变量?

2 个答案:

答案 0 :(得分:1)

您无法向Swift中的变量添加泛型,如已显示in this answer,但您可以将泛型添加到类似的函数中:

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

Check the apple Documentation.

答案 1 :(得分:1)

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

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

如另一个答案中所述,变量和常量不能是Generic类型。