Ответ 1
Если вы хотите вернуть Double, вы должны иметь дело с удвоением в своей функции. Измените сумму и я на пары (0.0 против 0) и преобразуйте каждое число в double. Вот так:
func avg(numbers: Int...) -> Double {
var sum = 0.0; //now implicitly a double
var i = 0.0;
for number in numbers {
sum += Double(number); //converts number to a double and adds it to sum.
++i;
}
return sum / i;
}
avg(42, 597, 12);
Целое число и преобразование с плавающей запятой
Конверсии между целыми числами и числовыми типами с плавающей запятой должны быть явными:
let three = 3
let pointOneFourOneFiveNine = 0.14159
let pi = Double(three) + pointOneFourOneFiveNine
// pi equals 3.14159, and is inferred to be of type Double
Здесь значение константы три используется для создания нового значения типа Double, так что обе стороны сложения одного типа. Без этого преобразования это не будет разрешено.
Обратное также верно для преобразования с плавающей точкой в целое, поскольку целочисленный тип может быть инициализирован с помощью значения Double или Float:
let integerPi = Int(pi)
// integerPi equals 3, and is inferred to be of type Int
Значения с плавающей запятой всегда усекаются при использовании для инициализации нового целочисленного значения таким образом. Это означает, что 4.75 становится 4, а -3.9 становится -3.