Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Dúvida no Ex. 6 da Aula 2 - Tipos de váriaveis, Playground, Funções.

No XCode 7, tive que inserir o nome do parametro (calories) na chamada da função.

func add(name:String, calories:Double){
    print("adding \(name)  with \(calories)")
}

add("Cake", calories:40.7);

Achei isso desnecessário.

Sabe informar por que ficou assim nessa versão?

2 respostas
solução!

Quando criamos uma função no swift 2.2, temos dois nomes de parâmetros: os externos à função (que são facultativos) e os internos à função, funcionando dessa maneira:

func soma(nomeExterno nomeInterno:Int, outroNomeExterno outroNomeInterno:Int) -> Int{
    return nomeInterno + outroNomeInterno;
}

Veja que dentro da função nos referimos aos parâmetros por nomeInterno e outroNomeInterno. Para chamar essa função, teremos essa sintaxe:

soma(nomeExterno:1, outroNomeExterno:2);

Veja que na chamada da função soma nos referimos aos argumentos como nomeExterno e outroNomeExterno.

No caso da função add omitimos o uso dos nomes externos. Sendo assim, devemos nos referenciar aos argumentos passados usando apenas os nomes internos:

add(name:"Cake", calories:40.7)

No entanto, quando não usamos nomes externos, podemos omitir o nome do primeiro argumento na chamada da função:

add("Cake", calories:40.7)

Resultando no código que você tem.

Tudo isso que eu disse está descrito em detalhes na documentação do Swift em Function Parameter Names.

Complementando... Caso queira omitir os nomes dos dois argumentos na chamada da função, basta inserir um "_"(underscore/underline) antes do segundo argumento. Exemplo:

func imprimeNomeEIdade(nome : String, _ idade : Int){ print("Nome: (nome), idade: (idade) anos.") }

imprimeNomeEIdade("Fulano", 35)