Swift和C语言的混合使用

C语言的类型和Swift类型的对应关系

  1. C语言的基本类型和Swift的对应关系
C 类型 Swift 对应类型 别名
bool CBool Bool
char,unsigned char CChar, CUnsignedChar Int8, UInt8
short, unsigned short CShort, CUnsignedShort Int16, UInt16
int, unsigned int CInt, CUnsignedInt Int32, UInt32
long, unsigned long CLong, CUnsignedLong Int, UInt
long long, unsigned long long CLongLong, CUnsignedLongLong Int64, UInt64
wchar_t, char16_t, char32_t CWideChar, CChar16, CChar32 UnicodeScalar, UInt16, UnicodeScalar
float, double CFloat, CDouble Float, Double
  1. C语言的指针类型和Swift中的对应关系
c语言 swift 说明
const Type * UnsafePointer 指针可变,指针指向的内存值不可变
Type * UnsafeMutablePointer 指针和指针指向的内存值均可变
Type * const * UnsafePointer 指针的指针:指针不可变,指针指向的类可变
Type * __strong * UnsafeMutablePointer 指针的指针:指针可变,指针指向的类可变
Type ** AutoreleasingUnsafeMutablePointer 自动释放指针 作为OC方法中的指针参数
const void * UnsafeRawPointer 不可变无类型指针
void * UnsafeMutableRawPointer 可变无类型指针

如何在Swift中使用C语言的宏(Macro)

在OC和C我们通常使用宏做如下几种操作:

  1. 定义一个常量值 如 #define MAXVALUE 100

  2. 定义一个较长的对象属性从而减少每次调用的代码量 如 #define SCREEN_WIDTH ([[UIScreen mainScreen] bounds].size.width)

  3. 定义一个带参数的宏,类似于一个函数 如 #define RGB_COLOR(r,g,b) [UIColor colorWithRed:r/255.f green:g/255.f blue:b/255.f alpha:1.0]

但对于上面的几种操作,Swift只能处理第一种情况,Swift会自动将使用#define定义常量的宏作为全局常量导入

//在头文件中定义的宏
#define FADE_ANIMATION_DURATION 0.35
#define VERSION_STRING "2.2.10.0a"
#define MAX_RESOLUTION 1268

#define HALF_RESOLUTION (MAX_RESOLUTION / 2)
#define IS_HIGH_RES (MAX_RESOLUTION > 1024)
//当上面的定义宏的头文件通过桥接文件导入进swift的时候,它和下面这些定义的全局变量是等价的
let FADE_ANIMATION_DURATION = 0.35
let VERSION_STRING = "2.2.10.0a"
let MAX_RESOLUTION = 1268

let HALF_RESOLUTION = 634
let IS_HIGH_RES = true

如何在Swift中使用C语言的Struct和Union

Swift会将在C头文件中声明的所有struct和union作为Swift struct 导入。 导入的Swift struct包含每个C struct或者union字段的存储属性和一个初始化程序,其参数与存储的属性相对应。

//C语言中
struct 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值