【问题标题】:Cannot invoke + with an argument of type CGRect error in Swift无法在 Swift 中使用 CGRect 类型的参数调用 + 错误
【发布时间】:2014-08-29 13:35:51
【问题描述】:

我想从CGRectMake函数启动一个UITableView的实例,但是当我尝试使用常量而不是直接分配一个新的Int来启动它时,例如:

UITableView(frame: CGRectMake(20, HEIGHT_OF_STATUS_AND_NAVIGATION_BAR + 120, tableWidth, tableHeight)

,然后我得到一个错误:Int is not convertible to CGFloat

所以我改成如下代码:

UITableView(frame: CGRectMake(20, (HEIGHT_OF_STATUS_AND_NAVIGATION_BAR + 120) as CGFloat, tableWidth as CGFloat, tableHeight as CGFloat)) // `tableWidth` and `tableHeight` are both of type `Int`.

,然后我得到一个错误:Cannot invoke + with an argument of type CGRect.

当然我可以通过分配Int来启动它,比如CGRectMake(20 + 300 + 12, 44 + 120, 300, 480)。但我想使用常量和变量。

那么这个错误是什么意思呢?我该如何解决?

我使用 Xcode 6 beta 6。

【问题讨论】:

    标签: swift xcode6 cgrect cgrectmake


    【解决方案1】:

    @Martin R 的方式运行良好,但后来我发现没有理由费心使用 CGFloat() - 您可以在 Swift 中使用 CGRect() 而不是 CGRectMake(),您可以在其上指定参数为 Int 以及 DoubleCGFloat 到所有 xywidthwidthheight 属性,只要所有四个属性都属于同一类型。此外,在 CGRectMake() 的情况下,您不能省略每个属性的名称,但这更容易、更灵活,并且被认为是 Swift 中默认的 CGRect 初始化程序。

    【讨论】:

      【解决方案2】:

      Int 无法使用 ... as CGFloat 表示法转换为 CGFloat

      你必须从Ints 构造CGFloats:

      let frame = CGRectMake(20.0, CGFloat(HEIGHT_OF_STATUS_AND_NAVIGATION_BAR + 120), CGFloat(tableWidth), CGFloat(tableHeight))
      

      【讨论】:

      • 谢谢。但是为什么Int 不能转换为CGFloat
      • @Gardecolo: as 是用于向下转换的“类型转换运算符”,而不是用于不同类型之间的转换。
      【解决方案3】:

      您应该在常量末尾添加“.0”,并在您传递的任何值的末尾添加“.0”,例如“120.0”。

      大小应该是 CGFloat 而不是 Int。

      应该可以的。

      【讨论】:

      • 它没有。它说 ”。”后缀是保留的
      猜你喜欢
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-06
      • 1970-01-01
      相关资源
      最近更新 更多