解析问题/预期 Swift 中的 CGFloat 类型

Posted

技术标签:

【中文标题】解析问题/预期 Swift 中的 CGFloat 类型【英文标题】:Parse Issue / Expected a type for CGFloat in Swift 【发布时间】:2014-08-29 16:04:29 【问题描述】:

我已使用 Xcode 6 beta 6 将 XLForm(一个 Objective C 库)添加到我的 Swift 项目中。

编译器在 XLFormDescriptorCell.h 中协议定义的方法原型上跳闸

#import <Foundation/Foundation.h>
...
@protocol XLFormDescriptorCell <NSObject>
...
@optional
+(CGFloat)formDescriptorCellHeightForRowDescriptor:(XLFormRowDescriptor *)rowDescriptor;
  ^
  Parse Issue / Expected a type

另外还有一个警告:“语义问题:在实现 'forDescriptorCellHeightForRowDescriptor:”'id' 与 'CGFloat'(又名 'float')时返回类型冲突

到我添加的项目的 Bridging-Header.h 文件中(尽管无论我添加与否都会出现解析错误):

#import "XLForm.h"

它本身包括 XLFormDescriptorCell.h

我看不到 XLForm 在哪里返回“id”。有人遇到过这个或类似的吗?

【问题讨论】:

【参考方案1】:

CGFloat在CoreGraphics/CGBase.h中声明,由UIKit/UIKit.h中导入的一些header导入,Xcode为你创建的大部分代码文件默认导入,根据需要手动导入。

至于返回类型不匹配,请在您的实现中检查返回值,确保它准确返回 CGFloat,而不是 NSNumber 或其他任何东西。

【讨论】:

某些东西从根本上被破坏了。我在编译错误的文件中添加了#import“CoreGraphics/CGBase.h”。错误去了。现在11! Swift 编译器找不到 NSObject、NSString、BOOL 的声明。我认为 XLForm 中包含的顺序使编译器感到困惑。 您到底看到了什么错误?不要忘记在需要的地方导入 ObjC 的 Foundation 标头。 我继续前进,将github.com/nicklockwood/FXForms 作为替代方案。 无论您要使用什么框架,都适用相同的规则,某些标头可能没有它们需要的所有导入,因为它们被设计为导入到已经导入此基本框架的环境中。当你在同一个项目中结合两种语言时会有点复杂,但基础总是相同的。 “同样的规则适用” - 完全同意。奇怪的是,FXForms 运行顺畅。这并不是说一个比另一个写得更好。 XLForm 可能只是 beta Swift / Xcode 6 Beta 6 或其他奇怪的受害者。无论哪种方式,我都被这个僵局击中(实践总是推翻理论:) 并且已经转向 FXForms。

以上是关于解析问题/预期 Swift 中的 CGFloat 类型的主要内容,如果未能解决你的问题,请参考以下文章

swift 3 中 swift 2 的 CGFloat.random(min: CGFloat, max: CGFloat) 是啥?

swift获取图片像素颜色值

SKShapeNode在Swift中的浮点问题

关于在 Swift 4 中返回 CGFloat 值

由于 Swift 缺少 CGFloat 的隐式转换而造成的混乱

Swift 二元运算符“+”不能应用于两个 CGFloat 操作数