【问题标题】:What is the purpose of under score in when declaring a IBAction func? [duplicate]声明 IBAction 函数时,under score in 的目的是什么? [复制]
【发布时间】:2021-06-07 22:47:40
【问题描述】:

初学者问题,我意识到当Xcode为@IBAction声明一个函数时,它声明如下:

@IBAction func hardnessSelected(_ sender: UIButton), 我读到的是,

创建一个名为硬度选择的函数,它接受一个参数 被调用的 sender 接受类型 UI 按钮。

据我目前的理解,当你想要声明一个你不会改变的变量时使用 _ ,例如在 for 循环中告诉 swift 这个变量的值对优化性能没有影响。

但是,在上述情况下,变量“sender”和 _ 都有一个名称,我不明白为什么。

谁能解释一下?

【问题讨论】:

标签: swift function ibaction


【解决方案1】:

这个地方是为标签声明的,这意味着一旦你调用了这个函数,它就不会出现在你面前,例如:

   func sum (_ number1: Int, _ number2: Int) {
    print(number1 + number2)
}

调用该函数后,您无需提及 number1 或 number2,而只需直接写下数字:

sum(1, 2)

要明确的是,它和使用下面的函数是一样的:

func summation(myFirstNumber number1: Int, mySecondNumber number2: Int) {
    print (number1 + number2)
}

但是在这里我没有使用 _,而是使用了标签,所以当我调用函数时,我将使用这些标签:

summation(myFirstNumber: 1, mySecondNumber: 2)

所以现在很清楚 _ 不是写标签。

更多信息请查看:here 中的函数参数标签和参数名称

【讨论】:

    【解决方案2】:

    Swift 允许 argumentLabel 与实际的 argument 本身不同,以提高可读性。


    如果你的函数签名是这样的 -

    func value(for key: String)
    

    在这种情况下,这些值为argumentLabel == forargument == key。在通话现场,您必须提及argumentLabel,如下所示。

    value(for: "myCustomKey")
    

    如果你的函数签名是这样的 -

    func valueForKey(_ key: String)
    

    在这种情况下,您明确要求编译器允许您在调用此函数时省略argumentLabel。请注意,argument == key 将不会在呼叫现场显示,如下所示。

    valueForKey("myCustomKey")
    

    【讨论】:

      猜你喜欢
      • 2023-03-25
      • 2011-11-09
      • 2011-03-09
      • 1970-01-01
      • 2020-08-10
      • 2012-08-10
      • 2015-12-20
      • 1970-01-01
      相关资源
      最近更新 更多