我有一个方法可以迭代类别列表,最后从所有类别返回项目。简单的代码如下所示:
func iterateMyCategoriesItems(item:(_ category:Category) -> Void)
{
for category in allCategories
{
item(category)
}
}
使用时:
iterateMyCategoriesItems { (category) in
// doing something here with every category...
}
到目前为止一切顺利,但是现在我想向此方法添加可选的完成内容,因此我将代码更改为:
func iterateMyCategoriesItems(item:(_ category:Category) -> Void, _ completion:(() -> Void)? = nil)
{
for category in allCategories
{
item(category)
}
completion?()
}
但是现在当我尝试使用这种方法时:
iterateMyCategoriesItems { (category) in
// doing something here with every category...
}
编译器显示错误:
调用中缺少参数“ item”的参数。
所以,我做错了什么?
您应该能够确定在此调用中使用的是尾随闭包:
iterateMyCategoriesItems { (category) in
// doing something here with every category...
}
Swift编译器检测到这是一个尾随闭包,因此将其与方法的最后一个参数(即完成处理程序)匹配。
既然已经完成了,它将继续寻找与第一个参数匹配的其他参数。没有找到,所以它抱怨。
要解决此问题,您必须放弃使用尾随闭包,并正确传递参数:
iterateMyCategoriesItems(items: { (category) in
// doing something here with every category...
})
您也可以删除参数标签以使其更整洁。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句