为什么我需要快速的下划线?

为什么我需要快速的下划线?,第1张

概述Here它说,“注意:_意思是”我不在乎这个价值“,但是来自JavaScript,我不明白这是什么意思。 我可以获得这些功能打印的唯一方法是在参数之前使用下划线: func divmod(_ a: Int, _ b:Int) -> (Int, Int) { return (a / b, a % b)}print(divmod(7, 3))print(divmod(5, 2))pr Here它说,“注意:_意思是”我不在乎这个价值“,但是来自JavaScript,我不明白这是什么意思。

我可以获得这些功能打印的唯一方法是在参数之前使用下划线:

func divmod(_ a: Int,_ b:Int) -> (Int,Int) {    return (a / b,a % b)}print(divmod(7,3))print(divmod(5,2))print(divmod(12,4))

没有下划线,我必须这样写,以避免任何错误:

func divmod(a: Int,b:Int) -> (Int,a % b)}print(divmod(a: 7,b: 3))print(divmod(a: 5,b: 2))print(divmod(a: 12,b: 4))

我不明白这个下划线的用法。什么时候,如何以及为什么要使用这些下划线?

不同用例有几个细微差别,但通常下划线意味着“忽略这个”。

当声明一个新功能时,下划线告诉Swift在调用时该参数不应该没有标签 – 这是你看到的。更完整的函数声明如下所示:

func myFunc(label name: Int) // call it like myFunc(label: 3)

“label”是参数标号,调用该函数时必须存在。 (从Swift 3起,默认情况下,所有参数都需要标签。)“name”是您在函数中使用的该参数的变量名。较短的形式如下所示:

func myFunc(name: Int) // call it like myFunc(name: 3)

这是一个快捷方式,可以让外部参数标签和内部参数名称使用相同的单词。它相当于func myFunc(名称:Int)。

如果您希望您的函数可以在没有参数标签的情况下调用,则可以使用下划线_使标签无任何/无效。 (在这种情况下,如果希望能够使用参数,则必须提供一个内部名称。)

func myFunc(_ name: Int) // call it like myFunc(3)

在赋值语句中,下划线表示“不分配任何内容”。如果要调用返回结果但不关心返回值的函数,可以使用此方法。

_ = someFunction()

或者,像你链接的文章一样,忽略返回的元组的一个元素:

let (x,_) = someFunctionThatReturnsXandY()

编写一个实现一些定义函数类型的闭包时,可以使用下划线忽略某些参数。

PHPhotolibrary.performChanges( { /* some changes */ },completionHandler: { success,_ in // don't care about error        if success { print("yay") }    })

类似地,当声明采用协议或覆盖超类方法的函数时,可以使用_参数名来忽略参数。由于协议/超类也可能会定义该参数没有标签,甚至可以在一行中使用两个下划线。

class MyVIEw: NSVIEw {    overrIDe func mouseDown(with _: NSEvent) {        // don't care about event,do same thing for every mouse down    }    overrIDe func draw(_ _: NSRect) {        // don't care about dirty rect,always redraw the whole vIEw    }}

与最后两种风格有关:当使用绑定局部变量/常量的流控制结构时,可以使用_忽略它。例如,如果要迭代序列而不需要访问其成员:

for _ in 1...20 { // or 0..<20    // do something 20 times}

如果您在switch语句中绑定元组大小写,则下划线可以作为通配符,如本示例所示(从The Swift Programming Language中的缩写):

switch somePoint { // somePoint is an (Int,Int) tuplecase (0,0):    print("(0,0) is at the origin")case (_,0):    print("(\(somePoint.0),0) is on the x-axis")case (0,_):    print("(0,\(somePoint.1)) is on the y-axis")default:    print("(\(somePoint.0),\(somePoint.1)) isn't on an axis")}
总结

以上是内存溢出为你收集整理的为什么我需要快速的下划线?全部内容,希望文章能够帮你解决为什么我需要快速的下划线?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1054925.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存