Swift 3 first parameter names

No Swift 2, parece que o nome do primeiro parâmetro nem sempre é necessário ao chamar uma function. Agora, no Swift 3, o primeiro nome do parâmetro é necessário ao chamar a function. Por exemplo:

func frobnicate(runcible: String) { print("Frobnicate: \(runcible)") } 

O Swift 2.2 permitia que a function fosse chamada simplesmente digitando:

 Frobnicate("Station") 

O Swift 3 parece estar exigindo que usemos os nomes dos primeiros parâmetros de methods como:

 Frobnicate(runcible:"Station") 

É este o caso do Swift 3 para todas as funções e methods ou apenas para determinadas situações?

Sim, isso está certo. O Swift está consertando uma inconsistência de linguagem dessa forma (isso sempre foi necessário para inicializadores).

Se você não quiser usar o nome do parâmetro externo, basta removê-lo explicitamente:

 func frobnicate(_ runcible: String) { print("Frobnicate: \(runcible)") } 

Você pode ler o raciocínio completo no Swift Evolution 0046

Você pode ler o Swift Programming Language (Swift 3) no i-Book. Além disso, você pode verificar isso no WWDC 2016: O que há de novo no Swift

No Swift 3, por padrão, as funções usam seus nomes de parâmetros como labels para seus argumentos. Escreva um label de argumento personalizado antes do nome do parâmetro ou escreva _ para não usar nenhum label de argumento.

 fun greet(_ person: String, on day: String) -> String { return "Hello \(person), today is \(day)." } greet("John", on: "Wednesday") 

ou

 // This also works with Swift 2 fun addThreeNumber(_ first: Int, _ second: Int, _ third: Int) { print(first+second+third) } addThreeNumber(1, 2, 3) 

Exatamente. No Swift 3.0, é obrigatório escrever nomes de parâmetros para todos os parâmetros (incluindo o primeiro parâmetro). O nome do parâmetro é aquele que é usado dentro do corpo de implementação da function.

 func frobnicate(runcible: String) { print("Frobnicate: \(runcible)") } 

Por padrão, o label do parâmetro externo é o mesmo que o nome do parâmetro, se você não especificar nenhum label de parâmetro explicitamente. Rótulo de parâmetro é aquele que é usado para passar os argumentos ao chamar a function. Se você precisar, para melhor propósito de clareza, também é possível especificar labels de parâmetro externo explicitamente. Exemplo abaixo

 func frobnicate(runcibleExternalLabel runcible: String) { print("Frobnicate: \(runcible)") } 

Se você quiser pular o label do parâmetro externo ao chamar a function, basta inserir um “_” antes do nome do parâmetro.

 func frobnicate(_ runcible: String) { print("Frobnicate: \(runcible)") } 

Sim, o Swift 3 exige que você envie o primeiro label de parâmetro.

Por favor, consulte as alterações do Swift 3

O motivo pelo qual você deseja labels para parâmetros é que outro código possa fornecer parâmetros em qualquer ordem.

Sem labels, quando você chama a function, os parâmetros são anônimos e você não pode ter certeza se os forneceu na ordem errada.

Colocar labels na frente dos parâmetros e ferramentas de código podem fazer um trabalho muito melhor na captura de erros que os humanos colocam dentro

O sublinhado é apenas uma maneira de lidar com a transição do código legado; nomes de methods, incluindo um primeiro parâmetro implícito. Você deve alterar os sublinhados que a migration adiciona ao seu código para um label de parâmetro explícito. Você sabe que isso faz sentido.