Swift错误:在调用中缺少参数标签'name:'

Jia*_*aro 12 swift

我正在学习默认参数,并且搁浅了一些奇怪的东西:

import UIKit

func greet(name: String = "world") {
    println("hello \(name)")
}

greet("jiaaro")
Run Code Online (Sandbox Code Playgroud)

这会抛出一个错误:

Playground execution failed: error: <REPL>:9:7: error: missing argument label 'name:' in call
greet("jiaaro")
      ^
      name:
Run Code Online (Sandbox Code Playgroud)

我明白它想要,greet(name: "jiaaro")但我明白为什么这是必要的.

Jia*_*aro 14

Swift函数可以指定本地和外部参数名称:

func greet(who name: String = "world") {
    println("hello \(name)")
}

// prints "hello world"
greet()

// prints "hello jiaaro"
greet(who:"jiaaro")

// error
greet("jiaaro")

// error
greet(name: "jiaaro")
Run Code Online (Sandbox Code Playgroud)

要退出此行为,您可以使用下划线作为外部名称.请注意,第一个参数隐式使用"无外部名称"行为:

func greet(name: String = "world", _ hello: String = "hello") {
    println("\(hello) \(name)")
}

// prints "hello world"
greet()

// prints "hello jiaaro"
greet("jiaaro")

// prints "hi jiaaro"
greet("jiaaro", "hi")

// error
greet(name: "jiaaro")
Run Code Online (Sandbox Code Playgroud)

现在Swift 2.0中不允许使用以下内容,请参阅下面的等效代码.

您可以使用#前缀为第一个参数使用相同的本地和外部名称:

func greet(#name: String = "world", hello: String = "hello") {
    println("\(hello) \(name)")
}

// prints "hi jiaaro"
greet(name: "jiaaro", hello: "hi")
Run Code Online (Sandbox Code Playgroud)

Swift 2.0代码:

func greet(name name: String = "world", hello: String = "hello") {
    println("\(hello) \(name)")
}

// prints "hi jiaaro"
greet(name: "jiaaro", hello: "hi")
Run Code Online (Sandbox Code Playgroud)