Swift 与 C 语言混合编程

本文探讨了Swift与C语言的混合编程,包括基本数据类型、枚举、指针的使用,以及全局常量和预处理指令。Swift提供与C语言兼容的特性,如C风格枚举和指针操作,但避免直接使用指针以提高安全性。同时,Swift不支持C语言的预处理指令,而是采用全局常量和编译时属性替代。
摘要由CSDN通过智能技术生成

前言

  • 作为一种可与 Objective-C 相互调用的语言,Swift 也具有一些与 C 语言的类型和特性,如果你的代码有需要,Swift 也提供了和常见的 C 代码结构混合编程的编程方式。

1、基本数据类型

  • Swift 提供了一些和 C 语言的基本类型如 char,int,float,double 等价的 Swift 基本数据类型。然而,这些 Swift 的核心基本类型之间并不能隐式的相互转换,如 Int。因此,只有你的代码明确要求它们时再使用这些类型,而 Int 可以在任何你想使用它的时候使用。

    C 类型 Swift 类型
    bool CBool
    char, signed char CChar
    unsigned char CUnsignedChar
    short CShort
    unsigned short CUnsignedShort
    int CInt
    unsigned int CUnsignedInt
    long CLong
    unsigned long CUnsignedLong
    long long CLongLong
    unsigned long long CUnsignedLongLong
    wchar_t CWideChar
    char16_t CChar16
    char32_t CChar32
    float CFloat
    double CDouble

2、枚举

  • Swift 引进了用宏 NS_ENUM 来标记的任何 C 风格的枚举类型。这意味着无论枚举值是在系统框架还是在自定义的代码中定义的,当他们导入到 Swift 时,他们的前缀名称将被截断。

  • Swift 也引进了标有 NS_OPTIONS 宏选项。而选项的行为类似于引进的枚举,选项还可以支持一些位操作,如 &,| 和 ~

  • 在 Objective-C 中,你用一个空的选项设置标示恒为零 (0)。在 Swift 中,使用 nil 代表没有任何选项。

  • 看这个 Objective-C 枚举

    // Objective-C
    
    typedef NS_ENUM(NSInteger, UITableViewCellStyle) {
                
        UITableViewCellStyleDefault,
        UITableViewCellStyleValue1,
        UITableViewCellStyleValue2,
        UITableViewCellStyleSubtitle
    };
    
  • 在 Swift 中这样来实现

    // Swift 
    
    enum UITableViewCellStyle: Int {
         
            
        case Default
        case Value1
        case Value2
        case Subtitle
    }
    
  • 当你需要指向一个枚举值时,使用以点 (.) 开头的枚举名称

    // Swift
    
    let cellStyle: UITableViewCellStyle = .Default
    

3、指针

  • Swift 尽可能避免让你直接访问指针。然而,当你需要直接操作内存的时候,Swift 也为你提供了多种指针类型。下面的表使用 Type 作为占位符类型名称来表示语法的映射。

  • 对于参数,使用以下映射:

    C 句法 Swift 句法
    const void * CConstVoidPointer
    void * CConstPointer<Type>
    const Type * CUnsignedChar
    Type * CMutablePointer<Type>
  • 对于返回类型,变量和参数类型的多层次指针,使用以下映射:

    C 句法 Swift 句法
    void * COpaquePointer
    Type * UnsafePointer<Type>
  • 对于类(class)类型,使用以下映射:

    C 句法 Swift 句法
    Type * const * CConstPointer<
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值