我正在学习Swift(遵循Apple的教程)并且我已经遇到过这种表示法:
optional func imagePickerController(_ picker: UIImagePickerController,
didFinishPickingMediaWithInfo info: [String : AnyObject])
在这种情况下,_
是什么意思? didFinishPickingMediaWithInfo
和信息词典之间的关系是什么(显然它不是类型,因为它是在冒号之后提供的)?
答案 0 :(得分:3)
定义函数或方法的参数时,除了类型之外,每个参数都必须有一个本地名称,它标识可从函数体中访问的变量的名称,但它也可以有一个外部名称,在调用函数时使用。
func doSomething(externalName internalName: Int) {
print(internalName)
}
doSomething(externalName: 4)
代替外部名称的下划线表示没有为该参数定义外部名称。在上面的示例":
func doSomething(_ internalName: Int) {
print(internalName)
}
它表示通过传递参数调用函数,而不用外部名称作为前缀:
doSomething(5)
外部名称有助于识别每个参数的用途,使代码更易于阅读。例如,比较一下:
update(33, 1, data)
用这个:
update(invoiceId: 33, itemId: 1, invoiceDetails: data)
由于它的实用性,Swift自动"促进"未明确指定时,外部名称的本地名称。在Swift 1.x中:
在Swift 2.0中,全局函数遵循与方法相同的规则。
自动生成外部名称意味着例如这样的函数:
func updateInvoice(invoiceId: Int, invoiceDetailId: Int, invoiceDetail: data)
将其签名自动更新为:
func updateInvoice(invoiceId: Int, invoiceDetailId invoiceDetailId: Int, invoiceDetail invoiceDetail: data)
^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^
自动为第2和第3个添加外部名称(即第1个之后的所有参数)。
在你的情况下:
optional func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject])
第一个下划线表示:不使用也不为此参数生成外部名称。对于第二个参数,在调用函数时它被引用为didFinishPickingMediaWithInfo
,但它可以作为名为imagePickerController
的变量用于info
方法。
答案 1 :(得分:0)
查看此文章http://natashatherobot.com/swift-parameter-names-in-functions/
它解释了使用" _"的含义。在函数/方法签名中。