【问题标题】:Swift: Why necessary to omit name of first parameter, but not subsequent parameters in function callsSwift:为什么必须省略第一个参数的名称,而不是函数调用中的后续参数
【发布时间】:2016-04-12 22:24:09
【问题描述】:

为什么在调用这样的函数时必须you pass in the first argument value without writing its name, and every subsequent value with its name

func greet(name: String, day: String) -> String {
    return "Hello \(name), today is \(day)."
}

greet("Anna", day: "Tuesday")

【问题讨论】:

  • 这个线条样式的命名方法来自Objective C,当你可以看懂的时候:getName(name, fromPerson: person, withAge: age)
  • 如果你不想写出一天,你可以把声明改为greet(name: String, _ day: String) -> String
  • @EricD。不是重复的,因为我特别问你为什么不使用参数名称仅用于第一个而不是后续的。
  • 没问题,我已经撤回了以骗子身份关闭的投票,因为它不是完全重复的,而且你得到了一个很好的答案。

标签: ios swift


【解决方案1】:

因为 Objective-C (see here) 和 Swift 的命名约定是以您的第一个参数的名称结束您的方法名称:

func greetPersonNamed(name: String, onDay day: String) -> String {
    return "Hello \(name), today is \(day)."
}

greetPersonNamed("Anna", onDay: "Tuesday")

如果你喜欢写第一个参数的名字,你可以这样写:

func greet(name name: String, day: String) -> String { /* ... */ }
greet(name: "Anna", day: "Tuesday")

第一个name 指的是外部名称,第二个是您方法内部使用的名称。

编辑

Swift 3 的命名指南已经发布 (see here),它们与 Objective-C 中使用的命名指南不同。

第一个参数的名称不应包含在方法名称中。如果函数意图明确,则可以省略第一个参数的外部名称。否则你应该命名它。

假设您可以问候人和宠物。在这种情况下,您应该为第一个参数添加一个外部名称:

func greet(person name: String, day: String)
func greet(pet name: String, day: String)

greet(person: "Anna", day: "Tuesday")

如果你只能打招呼,那么你可以省略它:

func greet(name: String, day: String)
greet("Anna", day: "Tuesday")

【讨论】:

  • 我实际上无法告诉你这个答案有多大帮助。内置的 Swift 变量名现在变得更有意义了......
猜你喜欢
  • 2016-04-15
  • 1970-01-01
  • 2020-03-08
  • 2014-07-25
  • 1970-01-01
  • 2021-05-17
  • 1970-01-01
  • 1970-01-01
  • 2017-04-04
相关资源
最近更新 更多