Swift 4自定义函数参数标签调用误区及强制使用咨询
关于Swift函数参数标签必填性的问题解答
首先得帮你理清楚整个逻辑:你写了这样一个Swift函数:
func greet(person person: String, on day: String) -> String { return "Hello \(person) on \(day)" }
一开始误以为在Swift 4里能直接用greet("John", "23")调用(觉得自定义参数标签能像用_那样被省略),所以想找办法强制调用时必须带上person:和on:标签,但后来你也发现了——这个问题其实不成立,因为自定义参数标签本身就是默认必填的。
为什么会有初始误解?
大概率是混淆了Swift参数标签和参数名的规则:
- 如果函数定义时只写了一个参数名称(比如
func greet(_ person: String, _ day: String)),调用时才可以省略标签; - 但像你这样明确指定了参数标签(
person和on),调用时必须带上这些标签,否则编译器直接报错。
实际验证一下
你要是试着用greet("John", "23")调用你的函数,Swift编译器会立刻抛出错误:Missing argument labels 'person:on:' in call——这说明你根本不需要额外做任何设置来强制要求使用标签,Swift已经默认帮你把这件事搞定了。
补充:如果想让参数标签可选怎么办?
反过来讲,要是你真的想让某个参数可以省略标签,才需要显式用_作为参数标签,比如:
func greet(_ person: String, on day: String) -> String { return "Hello \(person) on \(day)" }
这时候调用时就能写成greet("John", on: "23"),person的标签被省略了,但on标签还是必须带上。
内容的提问来源于stack exchange,提问作者Alex Sfinx87
相关产品推荐
相关产品推荐

