首页 > 解决方案 > 我如何将协议实现作为函数的参数

问题描述

我如何创建协议作为函数的参数。

在Android java中,我们可以像这样对接口进行参数化。

Button.setOnClickListener(new View.OnClicklistener()
{
    @Override
    public void onClick(View v)
    {

    }
});

但是我如何在 Swift 中做同样的事情。例如,我有以下协议,我如何在构建协议时传递协议。

protocol ButtonListener
{
    func onClick()
}

标签: swift

解决方案


似乎对您应该使用什么来实现它存在误解。可能您想将闭包作为参数传递给函数。

引用Swift 编程语言 - 闭包

闭包是可以在代码中传递和使用的独立功能块。Swift 中的闭包类似于 C 和 Objective-C 中的块以及其他编程语言中的 lambda。

例子:

protocol Foo {
    func myFunc(onClick: (_ myView: UIView) -> Void)
}

class MyClass: Foo {
    func myFunc(onClick: (UIView) -> Void) {
        // ...
    }
}

这里我们有一个Foo包含myFunc类型为闭包参数的协议(UIView) -> Void

所以:

let object = MyClass()

object.myFunc { view in
    // you can access `view` here as:
    view.backgroundColor = ...
    view.frame = ...
}

推荐阅读