2016-09-30 6 views
0

Я не могу понять, как преобразовать значение типа Int ожидаемого типа аргумента Double для mph = kph * 0.6214 в следующем коде:Невозможно преобразовать значение типа «Int» ожидаемого типа аргумента «Double»

var mph : Double! 
var kph : Float! 

print("KPH MPH") 

print("------------") 

for kph in 60.stride(to: 130, by: 10) { 
    mph = kph * 0.6214 
    print("\(kph)  \(mph)") 
} 

Как Я программирую for для получения желаемых результатов?

+0

cast kph to Double: ** mph = Double (kph) * 0.6214 ** –

+2

Обратите внимание, что kph в цикле for является другой переменной из kph вверху, которая никогда не устанавливается. –

+0

http://stackoverflow.com/a/39774669/2303865 –

ответ

2

Просто объявить начальное значение, как буквальный Double (добавление .0)

for kph in 60.0.stride(to: 130, by: 10) { 

Затем компилятор выводит тип функции как Double и преобразует другие литералов неявно.

+0

Есть ли преимущество в производительности для этого метода при вызове Double (:)? – Eric

+0

Я думаю, 'stride' является общей функцией, все, что может сделать компилятор, является предпочтительным. – vadian

+0

@T. Бенджамин Ларсен, согласитесь ли вы, что ответ Вадяна является самым правильным ответом на этот вопрос? – Eric

4

Для предметов Double/Int вам просто нужно сделать Double (Int) *. Похоже, вам нужно также использовать обновленную версию шага. Я считаю, что это о праве:

for kph in stride(from: 60, to: 130, by: 10) { 
    mph = Double(kph) * 0.6214 
    print("\(kph)  \(mph)") 
} 

* хотя вы нерешительность, если километры в час должна быть Float или Int, и КАя ваше Выведение не километры в часе вы определили как Float. Вероятно, у вас может возникнуть проблема, если ваш план будет использовать это значение в другом месте.

+0

Также нет причин объявлять 'kph' как' Float! 'Перед циклом. – rmaddy

Смежные вопросы