`
larlf
  • 浏览: 105650 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

苹果系统开发中的混合编程(2):Swift和C的相互调用

阅读更多
 
在进行Swift和C之间的相互调用时,有必要先了解一下两种语言之间的类型转换关系:
 
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
 
 
下在还是先演示一下如何在Swift里对C的方法进行调用,创建一个Swift的项目:
 
 
在项目里创建C代码文件:
 
 
这个时候会提示你是否要生成Bridging Header,选择创建。
 

 

文件创建完成后的代码结构如下,可以看到有一个文件名为:<工程名>-Bridging-Header.h的文件,这就是在Swift和C之间进行桥接的文件。
 

 

在项目的配置中可以看到这个桥接文件是在这里指定的,所以如果忘记创建了这个文件也不用担心,自己新建一个在这里指定一下就可以了。

 

实现C的代码:
 
MyCFile.h
 

 

MyCFile.c
 

 

在桥接文件中引入C代码的头文件,非常简单,直接import一下就可以了。
 

 

然后在swift文件中就可以直接调用C的方法:
 

 

下面我们再添加一些代码,来实现两点:
一、C代码中对Swift代码的调用
二、数据的相互传递(以字符串为例)
 
MyCFile.h
 

 C对Swift方法的调用,其实相当于是注册一个全局的函数指针,可以参见SwiftCallbackFun的定义。

这个里面有一些OC的语法:
^ 操作符,说明这是一个闭包,也就是Block,Swift里的函数都是以闭包的形式传递进来的。
__nonnull 表示对象不应该为空,因为在混编的时候,Swift编译器并不知道一个Objective-C对象到底是optional还是non-optional,所以在Xcode 6.3引入了一个Objective-C的新特性:nullability annotations,这里可以定义为 __nullable 或 __nonnull 。
 
MyCFile.c
这里有一个对Swift方法的回调。
 

 

main.swift

 

Swift里的代码,要注意的有两点:
一、在Swift里对C中传入字符串处理的方式
二、要先给全局的Callback赋值,这样才能从C里调用到Swift里的方法。
 
分享到:
评论

相关推荐

    Apple苹果IOS开发Swift编程语言入门教程中文版.pdf

    Apple苹果IOS开发Swift编程语言入门教程中文版.pdf

    Swift语言编程案例讲解.pdf

    与Objective-C兼容:Swift可以与Objective-C代码无缝集成,可以调用Objective-C的类和函数,也可以被Objective-C调用。 开源性:Swift是开源的,意味着任何人都可以参与到它的发展和改进中。 Swift语言在苹果的...

    中海阳苹果编程语言Swift解析:中海阳将推动应用开发巨变

    中海阳苹果编程语言Swift解析:中海阳将推动应用开发巨变

    Apple苹果IOS开发Swift编程语言入门教程中文版借鉴.pdf

    Apple苹果IOS开发Swift编程语言入门教程中文版借鉴.pdf

    Swift编程语言(Swift 5)

    介绍: 《Swift 编程语言》是苹果官方对 Swift 语言做的权威指南,很遗憾苹果公司并没有进行多语言支持。所以我独立发起了这个手册的翻译工作——与其他现存翻译不同的是:它同步更新苹果官方的 Swift 开发者预览版 ...

    10Swift 字符.docx

    Swift是一种由苹果公司开发的编程语言,用于iOS、macOS、watchOS和tvOS应用程序的开发。它是一种现代化的编程语言,结合了C和Objective-C的优点,并添加了许多新的特性和功能。 一些Swift的重要知识点包括: 类和...

    04Swift 常量.docx

    Swift是一种由苹果公司开发的编程语言,用于iOS、macOS、watchOS和tvOS应用程序的开发。它是一种现代化的编程语言,结合了C和Objective-C的优点,并添加了许多新的特性和功能。 一些Swift的重要知识点包括: 类和...

    06Swift 运算符.docx

    Swift是一种由苹果公司开发的编程语言,用于iOS、macOS、watchOS和tvOS应用程序的开发。它是一种现代化的编程语言,结合了C和Objective-C的优点,并添加了许多新的特性和功能。 一些Swift的重要知识点包括: 类和...

    02Swift 变量.docx

    Swift是一种由苹果公司开发的编程语言,用于iOS、macOS、watchOS和tvOS应用程序的开发。它是一种现代化的编程语言,结合了C和Objective-C的优点,并添加了许多新的特性和功能。 一些Swift的重要知识点包括: 类和...

    08Swift 循环.docx

    Swift是一种由苹果公司开发的编程语言,用于iOS、macOS、watchOS和tvOS应用程序的开发。它是一种现代化的编程语言,结合了C和Objective-C的优点,并添加了许多新的特性和功能。 一些Swift的重要知识点包括: 类和...

    苹果Swift编程语言入门教程

    Swift是苹果今年最新推出的编程语言,结合了各种语言的优点。

    05Swift 字面量.docx

    Swift是一种由苹果公司开发的编程语言,用于iOS、macOS、watchOS和tvOS应用程序的开发。它是一种现代化的编程语言,结合了C和Objective-C的优点,并添加了许多新的特性和功能。 一些Swift的重要知识点包括: 类和...

    07Swift 条件语句.docx

    Swift是一种由苹果公司开发的编程语言,用于iOS、macOS、watchOS和tvOS应用程序的开发。它是一种现代化的编程语言,结合了C和Objective-C的优点,并添加了许多新的特性和功能。 一些Swift的重要知识点包括: 类和...

    09Swift 字符串.docx

    Swift是一种由苹果公司开发的编程语言,用于iOS、macOS、watchOS和tvOS应用程序的开发。它是一种现代化的编程语言,结合了C和Objective-C的优点,并添加了许多新的特性和功能。 一些Swift的重要知识点包括: 类和...

    Swift和JavaScript的 交互举例

    Swift是一种由苹果公司开发的现代化编程语言,专门用于iOS、macOS、watchOS和tvOS应用程序开发。...6. **适合移动应用开发**:Swift是苹果平台的官方编程语言,与iOS、macOS等系统深度集成,可以方便地开发应

    03Swift 可选(Optionals)类型.docx

    Swift是一种由苹果公司开发的编程语言,用于iOS、macOS、watchOS和tvOS应用程序的开发。它是一种现代化的编程语言,结合了C和Objective-C的优点,并添加了许多新的特性和功能。 一些Swift的重要知识点包括: 类和...

    《iOS开发实战:苹果生态圈编程卷(Swift语言版)》代码.7z

    《iOS开发实战:苹果生态圈编程卷(Swift语言版)》代码.7z

    Swift编程权威指南(第2版)

    书中系统讲解了在iOS和macOS平台上,使用苹果的Swift语言开发iPhone、iPad和Mac应用的基本概念和编程技巧。主要围绕使用Swift语言进行iOS和macOS开发,结合大量代码示例,教会读者利用高 级iOS和macOS特性开发真实的...

    Swift实现播放器项目联系

    Swift 是由苹果公司开发的一种现代的、通用的编程语言,用于iOS、macOS、watchOS和tvOS等系统的应用程序开发。下面是关于 Swift 的一些重要概念: 1. **安全与快速**:Swift旨在提供更安全(safety)、更快速(fast...

    苹果的新编程语言 Swift 简介

    苹果的新编程语言 Swift 简介

Global site tag (gtag.js) - Google Analytics