Swift和C语言混合编程教程

这篇文章主要介绍了Swift和C语言混合编程教程,介绍基本数据类型对比、指针、常量等内容,需要的朋友可以参考下

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

基本数据类型

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

C 类型Swift 类型
boolCBool
char, signed charCChar
unsigned charCUnsignedChar
shortCShort
unsigned shortCUnsignedShort
intCInt
unsigned intCUnsignedInt
longCLong
unsigned longCUnsignedLong
long longCLongLong
unsigned long longCUnsignedLongLong
wchar_tCWideChar
char16_tCChar16
char32_tCChar32
floatCFloat
doubleCDouble

枚举

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

Swift 也引进了标有NS_OPTIONS宏选项。而选项的行为类似于引进的枚举,选项还可以支持一些位操作,如 &,| 和 ~。在 Objective-C 中,你用一个空的选项设置标示恒为零(0)。在 Swift 中,使用 nil代表没有任何选项。

指针

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

C 句法Swift 句法
const void *CConstVoidPointer
void *CMutableVoidPointer
const Type *CConstPointer
Type *CMutablePointer


对于返回类型,变量和参数类型的多层次指针,使用以下映射:

C 句法Swift 句法
void *COpaquePointer
Type *UnsafePointer


对于类(class)类型,使用以下映射:

C 句法Swift 句法
Type * const *CConstPointer
Type * __strong *CMutablePointer
Type **AutoreleasingUnsafePointer

C 可变指针

当一个函数被声明为接受CMutablePointer参数时,这个函数可以接受下列任何一个类型作为参数:

•nil,作为空指针传入
•一个CMutablePointer类型的值
•一个操作数是 Type 类型的左值的输入输出表达式,作为这个左值的内存地址传入
•一个输入输出 Type[] 值,作为一个数组的起始指针传入,并且它的生命周期将在这个调用期间被延长

如果您像这样声明了一个函数:

复制代码 代码如下:

//Swift
func takesAMutablePointer(x: CMutablePointer) { /*...*/ }

那么您可以使用以下任何一种方式来调用这个函数:

复制代码 代码如下:

//Swift
var x: Float = 0.0
var p: CMutablePointer = nil
var a: Float[] = [1.0, 2.0, 3.0]

takesAMutablePointer(nil)
takesAMutablePointer(p)
takesAMutablePointer(&x)
takesAMutablePointer(&a)

以上就是Swift和C语言混合编程教程的详细内容,更多请关注0133技术站其它相关文章!

赞(0) 打赏
未经允许不得转载:0133技术站首页 » 其他教程