你如何在Swift中复制这个java接口?

时间:2014-11-06 00:56:20

标签: java ios swift

我知道你在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似乎只允许你使用协议本质上是一个对象的扩展...不酷。

1 个答案:

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