swift - 如何将函数作为可选参数传递 Swift
问题描述
Swift 新手,我目前正在通过以下方式将函数作为可选参数传递:
import Foundation
func foo()
{
print("Foo")
}
func bar()
{
print("Bar")
}
func dummy()
{
return
}
func myFunc()
{
myFunc(callBack: dummy())
}
func myFunc(callBack: (Void))
{
foo()
callBack
}
myFunc()
myFunc(callBack: bar())
即利用多态性
这似乎是一种不优雅的方法,有没有更好的方法,
谢谢,汤姆
编辑:
我知道我可以通过以下方式缩短此时间:
import Foundation
func foo()
{
print("Foo")
}
func bar()
{
print("Bar")
}
func dummy()
{
return
}
func myFunc(callBack: (Void) = dummy())
{
foo()
callBack
}
myFunc()
myFunc(callBack: bar())
但我仍然会说这是一个不雅的解决方案
解决方案
您可以轻松地将函数的默认值定义为参数:
func foo(completion: () -> Void = { }) {
completion()
}
你也可以让它默认为 nil:
func foo(completion: (() -> Void)? = nil) {
当它是一个可选的闭包时,你必须这样称呼它:
completion?()
推荐阅读
- php - 有没有办法使用 Laravel Eloquent 管理 mysql 用户并在 MySQL 中获取数据库大小?
- var - 为什么不能在js中重新声明与let和var相同的变量名?
- java - HashMap 对象不会复制到另一个 HashMap 对象中
- sql - 如果 json_agg 什么也没找到,posgres 返回空行
- batch-file - 从用户给定的字符串中添加引号
- c++ - 在有向图中打印所有循环
- electron - electron-forge make 导致错误:找不到为“win32”平台配置的任何 make 目标
- julia - Julia Symbolics 中常量表示的 Sqrt
- python - 为什么scrapy-proxys显示我的IP而不是代理?
- python - 是否可以在混淆矩阵中添加额外的列?