【问题标题】:Cannot convert value of type ‘Int’ to expected argument type ‘Double’无法将“Int”类型的值转换为预期的参数类型“Double”
【发布时间】:2017-02-08 13:49:27
【问题描述】:

我不知道如何在以下代码中将 Int 类型的值转换为 Double 的预期参数类型 mph = kph * 0.6214

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 进行编程以产生所需的结果?

【问题讨论】:

  • 像这样将 kph 转换为 Double:mph = Double(kph) * 0.6214
  • 请注意,for 循环中的 kph 与顶部的 kph 是不同的变量,它永远不会被设置。
  • 谢谢,@Leo Dabus。你能评论下面的答案吗?您认为哪个值得检查?
  • 我会和 Vadian 一样回答,所以我会接受他的回答。

标签: swift for-loop


【解决方案1】:

只需将初始值声明为文字Double(添加.0

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

然后编译器将函数的类型推断为Double,并隐式转换其他文字。

【讨论】:

  • 与调用 Double(:) 相比,该方法是否有性能优势?
  • 我猜,stride 是一个泛型函数,编译器可以推断的一切都是可取的。
  • @T. Benjamin Larsen,您同意 Vadian 的答案是这个问题的最正确答案吗?
  • 这当然是最优雅的。不过,您无需征得许可即可接受答案。 :-D(虽然我非常欣赏它会迅速向这个地方发送垃圾邮件的姿态)。
  • @T. Benjamin Larsen,您对我的代码进行了出色的批判性分析。我感谢你,所以我想表达尊重! ;)
【解决方案2】:

对于 Double / Int 的东西,你只需要做 Double(Int)*。似乎您还需要使用更新版本的步幅。我相信这是正确的:

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

*尽管您似乎不确定 kph 应该是 Float 还是 Int,并且您输出的 kph 不是您定义为 Float 的 kph。如果您的计划是在其他地方使用此值,您似乎可能会遇到麻烦。

【讨论】:

  • 在循环之前也没有理由将kph 声明为Float!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-12
  • 1970-01-01
  • 2017-12-29
  • 1970-01-01
  • 2016-08-01
  • 1970-01-01
相关资源
最近更新 更多