解析问题/预期 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) 是啥?