将泛型应用于变量和函数 - 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
}
泛型在此处创建 <T>
。它就像类型的变量。您可以将 T 更改为您想要的任何内容,只要它不在某处用作 Type 即可。约束位是: Number
。它将 T 的类型限制为遵守数字协议的类型。
func Vector3D<T: Number>(x: [T], y: [T], z: [T]) {
self.xCord = x
self.yCord = y
self.zCord = z
}
如其他答案所述,变量和常量不能是通用类型。
我正在尝试在 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
}
泛型在此处创建 <T>
。它就像类型的变量。您可以将 T 更改为您想要的任何内容,只要它不在某处用作 Type 即可。约束位是: Number
。它将 T 的类型限制为遵守数字协议的类型。
func Vector3D<T: Number>(x: [T], y: [T], z: [T]) {
self.xCord = x
self.yCord = y
self.zCord = z
}
如其他答案所述,变量和常量不能是通用类型。