在Swift中返回泛型类型
我有一个类,它有两个泛型对象数组:在Swift中返回泛型类型,swift,generics,return,assign,Swift,Generics,Return,Assign,我有一个类,它有两个泛型对象数组: public class Scene { objects:[Geometry<BSDF>] lights:[Geometry<Emitter>] ... 公共类场景{ 对象:[几何体] 灯光:[几何] ... 我有一个函数,我想从这些数组中的任何一个返回一些元素: public func hit<M>(origin:Vec, direction:Vec) -> (Geometry<M>?
public class Scene {
objects:[Geometry<BSDF>]
lights:[Geometry<Emitter>]
...
公共类场景{
对象:[几何体]
灯光:[几何]
...
我有一个函数,我想从这些数组中的任何一个返回一些元素:
public func hit<M>(origin:Vec, direction:Vec) -> (Geometry<M>?,CGFloat) {
var minDist = CGFloat.greatestFiniteMagnitude
var minGeometry:Geometry<M>? = nil
for g in objects {
let d = g.intersect(origin: origin, direction: direction)
if (d != 0 && d < minDist) {
minDist = d
minGeometry = g
}
}
// Do the same for lights
return (minGeometry,minDist)
}
public func hit(原点:Vec,方向:Vec)->(Geometry?,CGFloat){
var minDist=CGFloat.greatestfinitemagnity
变量几何:几何?=零
对于g-in对象{
设d=g相交(原点:原点,方向:方向)
如果(d!=0&&d
然而,对于行
minGeometry=g
我得到错误“无法将类型“GeometryM
表示单个具体类型。因此,如果M
表示发射器,则是doesn不匹配BSDF
。我明白了,那么如何创建返回BDSF或发射器几何体片段的函数呢?可以使用两种类型都符合的协议。对象必须实现相交(原点:方向:)
。然后用该协议替换几何体。