Swift 静态Var闭包返回Type.Type而不是Type

Swift 静态Var闭包返回Type.Type而不是Type,swift,Swift,我尝试在另一个类中打断、计数并稍后连接对象。 所以我建立了协议: typealias DataBreaker<T> = () -> [Double] typealias DataJoiner<T> = (_ particles: [Double]) -> T protocol SpaceIntepolatable { associatedtype Atom var breaker:DataBreaker<Atom> {get}

我尝试在另一个类中打断、计数并稍后连接对象。 所以我建立了协议:

typealias DataBreaker<T> = () -> [Double]
typealias DataJoiner<T> = (_ particles: [Double]) -> T

protocol SpaceIntepolatable {
    associatedtype Atom
    var breaker:DataBreaker<Atom> {get}
    static var joiner:DataJoiner<Atom> {get}
}
但是加入

let newAtom = Atom.joiner(particles)
导致编译器错误:

Cannot convert value of type 'Atom.Atom' to specified type 'Atom'

这可能是因为
joiner
是静态的。但是,如何避免它并因此获得原子?

当您不在类的范围内时,您必须在
点调用它

let newAtom = Point.joiner(particles)
编辑:

您说您有一个泛型类,如下所示:

class Space<Atom: SpaceIntepolatable> {
    func test() {
        let particles: [Double] = [0, 1]
        let newAtom: Atom = Atom.joiner(particles)
    }
}
protocol SpaceIntepolatable {
    var breaker: DataBreaker<Self> { get }
    static var joiner: DataJoiner<Self> { get }
}
一般来说,建议不要重用类型名,因为这样会得到类似于
Atom.Atom
的东西。也许你真的想要这样的东西:

class Space<Atom: SpaceIntepolatable> {
    func test() {
        let particles: [Double] = [0, 1]
        let newAtom: Atom = Atom.joiner(particles)
    }
}
protocol SpaceIntepolatable {
    var breaker: DataBreaker<Self> { get }
    static var joiner: DataJoiner<Self> { get }
}

实际上会起作用。

但在一个类中,我不知道Atom是双原子、点或其他什么。类被声明为空格。当我更改为Point.joiner时,我得到了“无法将'Point.Atom'(也称为'Point')类型的值转换为指定的'Atom'”类型。您必须显示连接的上下文。这很简单。在某个函数的类空间中:let particlesA=atomA.breaker()let particlesB=atomB.breaker()let particles:[Double]=interpolarrays(边界:边界,at:at,数组:(set1:particlesA,set2:particlesB))let newAtom:Atom=Atom.joiner(粒子)如果我把最后一行的
:Atom
弄丢了,这对我来说就行了。或者用正确的
Atom.Atom
替换它,因为我们在这里讨论的是
Point.Atom
类型。
protocol SpaceIntepolatable {
    var breaker: DataBreaker<Self> { get }
    static var joiner: DataJoiner<Self> { get }
}
class Space<Atom: SpaceIntepolatable> {
    func test() {
        let particles: [Double] = [0, 1]
        let newAtom: Atom = Atom.joiner(particles)
    }
}