swift - 我如何将协议实现作为函数的参数
问题描述
我如何创建协议作为函数的参数。
在Android java中,我们可以像这样对接口进行参数化。
Button.setOnClickListener(new View.OnClicklistener()
{
@Override
public void onClick(View v)
{
}
});
但是我如何在 Swift 中做同样的事情。例如,我有以下协议,我如何在构建协议时传递协议。
protocol ButtonListener
{
func onClick()
}
解决方案
似乎对您应该使用什么来实现它存在误解。可能您想将闭包作为参数传递给函数。
闭包是可以在代码中传递和使用的独立功能块。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 = ...
}
推荐阅读
- c# - 如何将 DbContext 实现为接口?最终目标是使用 Moq 进行单元测试
- coldfusion - 同一程序中的coldfusion两个cfmail崩溃
- c - 将 ELF 二进制文件转换为 .o 文件
- java - spring data jpa批量处理大结果集
- ssh - ssh-agent 不会在 CentOS 7 上保持活跃
- android - 应用在 Microsoft App Center 中运行,但在 Google Play 商店开放测试中运行
- python - 使用正则表达式检测段落中断 - 边缘情况问题
- python - Anaconda3 Python解释器不打印颜色
- python-3.x - 排列组合
- python - Python 3 中基元类初始化函数的隐式调用