我有一个带有返回值字符串的完成处理程序函数。
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)
以便我确切地知道返回值的含义而不是完成类型。谢谢!
答案 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
}