Swift-可选参数无法正常工作

阿西·吉瓦蒂(Asi Givati)

我有一个方法可以迭代类别列表,最后从所有类别返回项目。简单的代码如下所示:

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章