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

Meu playground não compila/executa igual ao vídeo

No capítulo 20: http://www.alura.com.br/course/desenvolvimento-em-swift-para-ios/section/20

Meu código está dessa forma:

var total:Double = 0
var values:Array<Double> = [1,2]

for i in values {
    total += i
}

total = total / values.count // Aqui dá erro de compilação

println(total)

O erro de compilação é:

<EXPR>:19:9: error: 'Double' is not convertible to 'Int'
total = total / values.count

Não consigo entender o porquê de um Double não poder ser dividido por um Int. Mas o engraçado é que isso aqui funciona:

var total:Double = 0
var values:Array<Double> = [1,2]

for i in values {
    total += i
}

total = total / 2

println(total) // Print 1.5

Talvez, uma das explicações é de que o count do Array não seja um Int. Pode ser?

2 respostas
solução!

Faz uma conversão direta.

Guilherme, bom dia!

Eu não consegui fazer funcionar com o cast, pois ele dá um erro dizendo que Int não pode ser transformado em Double. Faz todo sentido:

var total:Double = 0
var values:[Double] = [1,2]
for i in values {
    total += i
}
total = total / (values.count as Double) // Aqui dá erro de compilação
println(total)

Erro:

Playground execution failed: <EXPR>:46:31: error: 'Int' is not convertible to 'Double'
total = total / (values.count as Double) // Aqui dá erro de compilação

Mas eu consegui criando um Double a partir do count.

Assim:

var total:Double = 0
var values:[Double] = [1,2]
for i in values {
    total += i
}
total = total / Double(values.count) // Agora não tem erro
println(total) // Print 1.5 corretamente.

Mas isso ainda está um pouco esquisito. O Double, quando dividido por qualquer tipo numérico, deveria funcionar e retornar outro Double. Correto?