【问题标题】:Swift 4 custom argument labels - required? [closed]Swift 4 自定义参数标签 - 需要吗? [关闭]
【发布时间】:2018-08-27 04:52:48
【问题描述】:
func greet (person person: String, on day: String) -> String {
    return "Hello \(person) on \(day)"
}

可以执行为

问候(“约翰”,“23”)

Swift 4 - 自定义参数标签表现为无参数标签 - “_”。

如何强制执行自定义标签?

问候(人:“约翰”,在:“23”)

谢谢。

编辑 - 问题不正确,因为自定义标签是强制性的

【问题讨论】:

  • 在 Playground 中执行代码会产生预期的错误“Missing argument labels 'person:on:' in call”。您确定没有意外实现的没有参数标签的重载版本吗?
  • func greet(person person: String, on day: String) -> String { ... } 不能作为greet("John", "23") 执行。顺便说一句,额外的person 是多余的。应该是func greet(person: String, on day: String) -> String { ... }。
  • 以 greet("John", "23") 执行这个函数会得到编译错误 "Missing argument labels 'person:on:' in call"
  • 谢谢,看来我在 Swift 的命令行中提供了许多函数定义,编译器混合了这些定义,所以我可以将函数作为 greet ("John", "23") 执行。你的回答很完美,谢谢。

标签: swift function arguments


【解决方案1】:

在Swift 中,每个函数参数可以同时具有argument label 和parameter name。

  1. argument label:用于函数调用
  2. parameter name:在函数定义中使用

默认情况下,parameters 使用他们的parameter name 作为他们的argument label。

这些是可以在 swift 中使用的可能的函数声明:

案例1:parameter name与argument label相同

func greet (person: String, day: String) -> String {
    return "Hello \(person) on \(day)"
}

函数调用:greet(person: "John", day: "23")

案例2:不同的parameter name和argument label

func greet (person person: String, on day: String) -> String {
    return "Hello \(person) on \(day)"
}

函数调用:greet(person: "John", on: "23")

案例3:使用_作为argument label

func greet (_ person: String, _ day: String) -> String {
    return "Hello \(person) on \(day)"
}

函数调用:greet("John", "23")

更多关于函数参数的工作原理,可以参考:https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Functions.html

如果您仍然遇到任何问题,请告诉我。

【讨论】:

  • 谢谢,看来我在 Swift 的命令行中提供了很多函数定义,编译器混合了这些定义,所以我可以将函数作为 greet ("John", "23") 执行。你的回答很完美,谢谢。
  • 当然。快乐编码?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多