我知道你在swift中使用协议,但你无法像在java中使用接口一样实例化协议。这是Java中的一个例子
restartGameButton.setOnClickListener(new GuiClickListener() {
@Override
public void onClick(float x, float y) {
// TODO Auto-generated method stub
restartScene();
//I can put whatever code I want in here.
//This is great because I can embed this inside of another class
//like a game scene.
}
});
在restartGameButton里面我有一个只保存接口的变量。在setOnClickListener()中,我可以使用onClick()方法创建一个新的接口实例,要求实现并将其传递给restartGameButton。这允许您在onClickMethod中添加所需的任何代码。你怎么能在Swift中做到这一点? Swift似乎只允许你使用协议本质上是一个对象的扩展...不酷。
答案 0 :(得分:3)
使用可选的闭包属性。
class GameButton {
var x: Float
var y: Float
var onClickListener: ((x: Float, y: Float)->Void)?
func click(){
if let cb = self.onClickListener {
cb(x: self.x, y: self.y)
}
}
init(){
x = 1
y = 2
}
}
var button = GameButton()
button.onClickListener = {
(x: Float, y: Float)->Void in
println(x)
println(y)
}