我正在尝试在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和函数中将泛型应用于变量?
答案 0 :(得分:1)
您无法向Swift中的变量添加泛型,如已显示in this answer,但您可以将泛型添加到类似的函数中:
func swapTwoValues<T>(inout a:T, inout b:T){
let temporaryA = a
a = b
b = temporaryA
}
答案 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类型。