前言
- 作为一种可与 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<