【问题标题】:Cannot invoke initializer for type 'CGFloat' with an argument list of type '(CGFloat)'无法使用类型为“(CGFloat)”的参数列表调用类型“CGFloat”的初始化程序
【发布时间】:2016-08-31 12:45:54
【问题描述】:

我不太了解这个编译错误,因为我没有收到此错误,并且可以在真实设备上编译和运行,但如果我尝试在模拟器上构建和运行,我会收到此错误。

无法使用“(CGFloat)”类型的参数列表调用“CGFloat”类型的初始化程序

这是导致错误的代码行:

loadingNotification.yOffset = CGFloat(CGRectGetMinY(self.tableView.bounds))

如果我把它改成

loadingNotification.yOffset = Float(CGRectGetMinY(self.tableView.bounds))

它可以在模拟器上运行,但不能在我得到的真实设备上运行

'不能将'Float'类型的值赋给'CGFloat'类型

有什么想法可以解释为什么会这样吗?

【问题讨论】:

  • CGRectGetMinY() 已经返回一个 CGFloat。你使用的是 Swift 还是 Objective-C?
  • 也许我太厚了; loadingNotification 的类型是什么?

标签: ios swift xcode


【解决方案1】:

你可以这样写:

#if (arch(i386) || arch(x86_64)) && os(iOS)
    loadingNotification.yOffset = Float(CGRectGetMinY(self.tableView.bounds))
#else
    loadingNotification.yOffset = CGRectGetMinY(self.tableView.bounds)
#endif

无论如何,试着理解为什么你在设备中有CGFloat,而在sim中有Float

【讨论】:

  • 这适用于真实设备,但在尝试在模拟器上运行时会产生此错误:Cannot assign value of type 'CGFloat' to type 'Float'
  • 这意味着在 sim 中你的 yOffset 是一个 Float..你是否为 sim 管理了一些不同的东西?
  • 不是故意的,但有可能,我只是不知道去哪里找。
  • 我发现了问题,您的回答也有助于更正我的代码,所以我会接受它。这就是修复 sim 的原因:Xcode -> window-> Organizer->Projects 然后选择并删除您的项目派生数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多