Objective c CGU型和;敏捷的 我的情况:
我学习Swift已经有一段时间了,Swift是我为iOS开发学习的唯一语言,这意味着我没有系统地学习Objective-C。我只能读一点OC代码 当我试图将OC项目转换为Swift项目时,我遇到了一个类型转换问题 我只是混淆了OC代码中的一些Objective c CGU型和;敏捷的 我的情况:,objective-c,swift,Objective C,Swift,我学习Swift已经有一段时间了,Swift是我为iOS开发学习的唯一语言,这意味着我没有系统地学习Objective-C。我只能读一点OC代码 当我试图将OC项目转换为Swift项目时,我遇到了一个类型转换问题 我只是混淆了OC代码中的一些类型 目标C代码: 我未经证实的猜测: 我认为这是一个函数,可以执行一些工作,如类型转换,根据\if和\else将CGFLOAT\u类型转换为不同的类型 通过谷歌搜索CGFLOAT\u类型,我知道所有大写字母都是汇编语言 我还了解到,CGFLOAT\u T
类型
目标C代码:
我未经证实的猜测:
我认为这是一个函数,可以执行一些工作,如类型转换
,根据\if
和\else
将CGFLOAT\u类型转换为不同的类型
通过谷歌搜索CGFLOAT\u类型
,我知道所有大写字母都是汇编语言
我还了解到,CGFLOAT\u TYPE
在官方框架CGBase.h
中声明为宏
我的问题是:
当我试图用Swift编写CGFloat\u ceil()
时,我甚至找不到CGFloat\u类型
。我已经准备好在我的文件头上编写导入CoreGraphics
但是当我写#如果CGFLOAT#u是DOUBLE
&#else
&&#endif
时,这些代码只是以颜色显示在屏幕上,我的意思是,编译器不会出错。但是当我声明时,编译器无法识别CGFLOAT\u类型
我的问题:
那些神秘的CGFLOAT\uu
物品还能在Swift中使用吗
我真的被困在这里了。请教我如何翻译这些句子
Swift的密码
非常感谢您的指导和帮助
Ethan JoeCoreGraphics框架将CGFloat
定义为
#if defined(__LP64__) && __LP64__
# define CGFLOAT_TYPE double
# define CGFLOAT_IS_DOUBLE 1
// ...
#else
# define CGFLOAT_TYPE float
# define CGFLOAT_IS_DOUBLE 1
// ...
#endif
typedef CGFLOAT_TYPE CGFloat;
因此,它被定义为浮动
或双倍
,具体取决于您的平台
但是
对CGFloat
一无所知,它已经
两个不同的函数ceilf()
和
ceil()
用于float
和double
参数
您的CGFloat\u ceil()
现在使用CGFloat\u IS\u DOUBLE
定义和
选择匹配函数的预处理器(不是程序集!)
自动地
在Swift中不需要它。Swift定义重载ceil()
用于Float
、Double
和CGFloat
参数,所以
let x = ceil(someFloat) // returns a Float
let y = ceil(someDouble) // returns a Double
let z = ceil(someCGFloat) // returns a CGFloat
一切都按预期进行
另请注意,在Swift中,与(目标)C不同,CGFloat
是
不是Float
和Double
的简单类型别名,而是另一种类型。谢谢您的回答!
let x = ceil(someFloat) // returns a Float
let y = ceil(someDouble) // returns a Double
let z = ceil(someCGFloat) // returns a CGFloat