【发布时间】:2014-06-21 03:40:08
【问题描述】:
在 Swift 中,您可以编写以下代码:
func foo(_:Int) -> { return 1 }
其中下划线是一个被忽略的参数。我只是因为文档才知道这一点,但想不出任何用例来说明你为什么要这样做。我错过了什么吗?
【问题讨论】:
标签: swift parameters
在 Swift 中,您可以编写以下代码:
func foo(_:Int) -> { return 1 }
其中下划线是一个被忽略的参数。我只是因为文档才知道这一点,但想不出任何用例来说明你为什么要这样做。我错过了什么吗?
【问题讨论】:
标签: swift parameters
在以下情况下忽略参数(或元组的成员,它们非常接近同一事物)是有意义的:
您正在重写超类函数或实现由协议定义的函数,但该函数的实现不需要参数之一。例如,如果您挂钩应用启动,但不需要在该方法中引用共享的 UIApplication 实例:
override func application(_: UIApplication!, didFinishLaunchingWithOptions _: NSDictionary!) -> Bool { /* ... */ }
您提供了一个闭包(在 ObjC 中也称为块)作为某个 API 的参数,但您对该 API 的使用并不关心闭包的参数之一。例如,如果您正在提交对照片库的更改并想抛开一切,您可以忽略完成处理程序中的success 和error 参数:
PHPhotoLibrary.sharedPhotoLibrary().performChanges({
// change requests
}, completionHandler: { _, _ in
NSLog("Changes complete. Did they succeed? Who knows!")
})
您正在调用提供多个返回值的函数/方法,但不关心其中一个。例如,假设一个假设的 NSColor 方法将组件作为元组返回,您可以忽略 alpha:
let (r, g, b, _) = color.getComponents()
这背后的原因是它使您的代码更具可读性。如果您为最终没有使用的参数(或元组成员)声明本地名称,其他阅读您的代码的人(很可能只是几个月后的您自己)可能会看到该名称并想知道它在函数体中的使用位置或方式。如果您预先声明您将忽略该参数(或元组成员),则清楚地表明在该范围内无需担心它。 (理论上,这也可以为编译器提供优化提示,也可以让你的代码运行得更快。)
【讨论】:
也许您正在重写一个方法,而您的重写忽略了其中一个参数?清楚地表明您忽略了该参数,这样以后的编码人员就不必通过查看您的代码来确定它没有使用该参数,并清楚地表明这是故意的。或者可能是创建某种适配器模式,您可以清楚地表明其中一个参数被忽略了。
【讨论】: