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

Posted

技术标签:

【中文标题】找不到接受提供的参数的“init”的重载【英文标题】:Could not find an overload for 'init' that accepts the supplied arguments 【发布时间】: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,然后我们可以判断是哪个操作导致了错误。 【参考方案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)

【讨论】:

以上是关于找不到接受提供的参数的“init”的重载的主要内容,如果未能解决你的问题,请参考以下文章

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

Swift:找不到“|”的重载接受提供的参数

Swift 找不到接受提供的参数的“+=”的重载

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

错误:找不到接受提供的参数的“标题”的重载

找不到接受类型参数列表的 XCTAssertEqual 的重载 ([String : AnyObject], [String : AnyObject])