Objective c CGU型和;敏捷的 我的情况:

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

我学习Swift已经有一段时间了,Swift是我为iOS开发学习的唯一语言,这意味着我没有系统地学习Objective-C。我只能读一点OC代码

当我试图将OC项目转换为Swift项目时,我遇到了一个类型转换问题

我只是混淆了OC代码中的一些
类型


目标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 Joe

    CoreGraphics框架将
    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