gpt4 book ai didi

swift - 关于 Swift 中函数符号的问题

转载 作者:行者123 更新时间:2023-11-28 11:16:36 25 4
gpt4 key购买 nike

我正在学习 Swift(遵循 Apple 的教程)并且遇到了这种表示法:

optional func imagePickerController(_ picker: UIImagePickerController,
didFinishPickingMediaWithInfo info: [String : AnyObject])

在这种情况下,_ 是什么意思? didFinishPickingMediaWithInfo 和信息字典之间的关系是什么(显然它不是类型,因为它是在冒号之后提供的)?

最佳答案

在为函数或方法定义参数时,除了类型之外,每个参数都必须有一个局部名称,它标识了从函数体可访问的变量的名称,但它也可以有一个外部名称,在调用函数时使用。

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)
^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^

自动为第二个和第三个添加外部名称(即第一个之后的所有参数)。

在你的情况下:

optional func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject])

第一个下划线表示:不要为此参数使用或生成外部名称。至于第二个参数,它在调用该函数时被引用为 didFinishPickingMediaWithInfo,但它将作为名为 info 的变量提供给 imagePickerController 方法>.

推荐阅读:Function Parameter Names

关于swift - 关于 Swift 中函数符号的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31366057/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com