Xcode要求在完成处理程序中将_放在返回值名称之前

时间:2018-07-26 02:42:18

标签: ios swift xcode completionhandler

我有一个带有返回值字符串的完成处理程序函数。

func hardProcessingWithString(input: String, completion: (result: String) -> Void) {}

但是,Xcode要求我在返回值名称前加上_,因此我必须在结果前加上_

func hardProcessingWithString(input: String, completion: (_ result: String) -> Void) {}

因此,当我调用函数时,我的返回值没有名称,而是显示了此信息

hardProcessingWithString(input: String, completion: (String) -> Void)

有没有一种方法而不是显示

completion: (String) -> Void)

我希望它显示

completion: result -> Void)

以便我确切地知道返回值的含义而不是完成类型。谢谢!

3 个答案:

答案 0 :(得分:1)

由于某些版本的Swift,闭包类型不能具有参数名称。但是,有一种解决方法:

typealias Result = String

现在您可以使用Result作为关闭类型:

func f(completion: (Result) -> Void) { ... }

Foundation中的许多方法也可以做到这一点。例如,TimeInterval只是Double的别名,但是将其命名为TimeInterval可以使目的更清楚。

答案 1 :(得分:0)

这是设计使然(尽管可以肯定,并不是每个人都喜欢它)。见

https://bugs.swift.org/browse/SR-2894

如乔丹·罗斯(Jordan Rose)所述:

  

这是正确的行为。参数标签被认为是函数名称而不是其类型的一部分。函数值/闭包仅具有基本名称,而没有参数标签,因此无法指定它们。

答案 2 :(得分:0)

您不应该为闭包定义添加标签。像这样定义它。

func hardProcessingWithString(input: String, completion: (String) -> Void) {}

调用此函数时,应定义标签。

hardProcessingWithString(input: "") { (result) in

}