我注意到这是Swift中的一个有效函数:
promise = Validatebatch(); // call Validatebatch the first time and store the returned Promise object
promise = promise.then(Validatebatch); // another call to Validatebatch, only triggered after the previous has ended
promise = promise.then(Validatebatch); // again, this third Validatebatch call will only happen after the second one has ended.
如何访问参数?
修改 另外一个问题,是否有一个有效/良好的用例?
答案 0 :(得分:3)
你没有。使用该语法,您明确表示您不想访问该参数。
假设您可以访问非常强大的异步API,如下所示。
func theAnswerToLife(success:(answer: String) -> (), failure:(error: NSError) -> ())
是的,当然我保持执行秘密
现在,如果函数theAnswerToLife
确实找到答案,则调用success
闭包,否则调用failure
。
你被迫传递两个闭包/函数,但你真的只对answer
感兴趣,如果出现问题你不介意实际的错误。
所以你可以定义
func tellEveryone(answer: String) {
print("The answer to life is " + answer)
}
func badNews(_:NSError) {
print("Something went wrong, we will try again tomorrow")
}
badNews
可以作为第二个参数传递给theAnswerToLife
,将来查看代码的人会立即明白badNews
不关心收到的参数。
theAnswerToLife(tellEveryone, failure: badNews)
答案 1 :(得分:2)
这就是所谓的通配符匹配模式,它只是为了不能使用参数而引入,因为你只是不关心它。
通配符模式匹配并忽略任何值,并由下划线(_)组成。如果您不关心要匹配的值,请使用通配符模式。
如果需要访问参数值,则必须使用正确的标识符。
关于问题的更新部分。我不知道你为什么要这样做(只是一个疯狂的想法),但如果你想完全隐藏public
类的方法的参数名称,但仍然能够在{{1}中使用它们} sub-class,你可以这样做:
private
使用您的库的任何外部人员都会使用抽象public class Foo {
func test(_: String, _: Int) {
print("[Ignored]")
}
}
private class Bar: Foo {
override func test(stringArgument: String, _ intArgument: Int) {
print("\(stringArgument) \(intArgument)")
}
}
而不知道Foo
方法的参数名称。
答案 2 :(得分:1)
使用_的关键是你对使用参数不感兴趣。一个示例用法是
if let _ = someVariable as? String {
//Do stuff here if someVariable is a string
//But I'm not interested in accessing the unwrapped value, so I set the unwrapped variable name to _
}