无法在Swift 3中标记闭包参数?

时间:2016-09-19 20:42:14

标签: ios swift swift3

完成处理程序是iOS中常用的设计模式。

考虑这种常见情况:

我需要获取一个JSON字符串。如果失败,我将返回错误。我设置了这样的提取调用:

func getData(completionHandler: @escaping (_ jsonString: String?, _ error:     String?) -> Void) {

}

然后调用此函数我们得到了这个:

getData { (<#String?#>, <#String?#>) in
    <#code#>
}

//<#stuff#> represents an auto-complete placeholder in xcode

所以我们有两个参数包含数据和错误。两者都可选。 哪一个是哪个?据说Swift 3专注于在使用点上创造清晰度,但就在这里......我不知道哪一个是哪个。任何不熟悉此代码的人最终都会犯错误

所以我尝试通过删除'_'或添加如下标签来明确标记参数:

func getData(completionHandler: @escaping (json jsonString: String?, theError error:     String?) -> Void) {

}

但是,我收到这些错误: Function types cannot have argument label 'json' use '_' instead Function types cannot have argument label 'theError' use '_' instead

我希望能够做的是明确命名这些参数,或者至少在我设置呼叫时在自动完成中查看其标签。

基本上, 当我输出电话时,我会得到这个:

getData { (<#jsonString: String?#>, <#theError: String?#>) in
    <#code#>
}

getData { (jsonString, theError) in
    <#code#>
}

如果不为每个闭包类型创建typealias,我想不到这样做,这看起来很荒谬

有没有办法做我想要的事情? 当此功能被杀死时,是否考虑了这种情况?

这似乎违背了所有的智慧:https://swift.org/documentation/api-design-guidelines/

0 个答案:

没有答案