Why external name of the first parameter is omitted before Swift 3.0?

Here is the explanation: Understanding the strange grammar of parameters in Swift?

// will be declared as foo(_:b:c:) before Swift 3.0
func foo(a: T, b: U, c: V)

Why parameter naming rules is unified since Swift 3.0?

Here is the explanation: Establish consistent label behavior across all parameters including first labels

// will be declared as foo(a:b:c:) since Swift 3.0
func foo(a: T, b: U, c: V)