【问题标题】:Could not find an overload for 'init' that accepts the supplied arguments找不到接受提供的参数的“init”的重载
【发布时间】:2014-06-29 22:59:37
【问题描述】:

这两行代码给了我

找不到接受所提供参数的“init”的重载

错误:

var w = Int(self.bounds.size.width / Float(worldSize.width))
var h = Int(self.bounds.size.height / Float(worldSize.height))

【问题讨论】:

  • 什么是init?什么是云?你能说得更具体点吗?
  • worldSize.width 是什么类型?
  • 尝试在单独的行中创建您在代码中使用的 Float,然后我们可以判断是哪个操作导致了错误。

标签: swift


【解决方案1】:

错误信息具有误导性。这应该有效:

var w = Int(self.bounds.size.width / CGFloat(worldSize.width))
var h = Int(self.bounds.size.height / CGFloat(worldSize.height))

CGSizewidthheight 元素被声明为 CGFloat。 在 64 位平台上,CGFloatDouble 相同,具有 64 位, 而Float 只有 32 位。

所以问题是除法运算符, 这需要两个相同类型的操作数。与 (Objective-)C 相比,Swift 从不将值隐式转换为 不同的类型。

如果worldSize 也是CGSize,那么你根本不需要演员表:

var w = Int(self.bounds.size.width / worldSize.width)
var h = Int(self.bounds.size.height / worldSize.height)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多