2016-03-03 288 views
0

分配成員函數的成員變量是否有可能,還是功能需要申報staticclass斯威夫特

class SimManager { 
    var particleSimulation: (inout Particle, Float) -> Void = updateParticles 

    func updateParticles(inout p: Particle, deltaT: Float) -> Void { 
     ... 
    } 
} 

給人的編譯器錯誤:

SimManager.swift:36:63: Cannot convert value of type 'SimManager -> (inout Particle, deltaT: Float) -> Void' to specified type '(inout Particle, Float) -> Void'

回答

1

移動的particleSimulation初始化到類的指定初始化。

class SimManager { 
    var particleSimulation: ((inout Particle, Float) -> Void)! 

    func updateParticles(inout p: Particle, deltaT: Float) -> Void { 
    } 

    init() { 
    self.particleSimulation = updateParticles 
    } 
} 
+0

感謝的作品。下面的醜也在init()中起作用,以避免需要將其聲明爲隱式展開的可選項: particleSimulation = updateParticles ' 這個函數每幀調用5000+次,所以非常關鍵。因爲它是'ImplicitlyUnwrappedOptional '類型的別名,所以可能會有一些開銷,但不確定。爲了避免動態調度開銷,我還聲明瞭函數final。 –