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)
}
}