跨平台移动开发第三部分-iOS

现在,我们已经完成了在Android平台上设置和实现C ++代码的工作。 我们将从中断的地方继续,我们将尝试在iOS上运行代码!

如果您不知道Djinni是什么,请查阅第一部分的介绍和设置。 如果您想知道如何在Android上使用它,请查看第二部分以了解Android实现。

Apple的iOS一直使用Objective C作为主要语言来编写其应用程序,并且与C和C ++很好地集成在一起。 自从Swift语言发布以来,将Objective C代码集成到Swift还是相当容易的,反之亦然。 因此,即使没有Djinni,将C ++代码和Objective C链接起来也似乎很简单。 但是,我们仍然需要编写Objective C ++代码以将C ++链接到Objective C和Swift。 而且它仍然是相当复杂的代码。 Djinni消除了自己编写Objective C ++的痛苦。

动手

首先,我们将在项目根目录中创建一个名为iOSApplication的文件夹,如下所示:

  CPP计算器 
|
|-生成
| -src
| -Android应用程序
| -iOSApplication *

之后,让我们启动Xcode并创建一个新的Xcode项目

选择单视图应用

CalculatorApp设置为产品名称。 为了方便起见,我们将选择Swift作为首选语言。

并将您的项目放在刚创建的文件夹中。

我们将有一个空项目。 现在,您将必须在项目中创建几个组。 这是BridgeDjinniCalculatorImpl

第一组,我们将其命名为Bridge,用于生成的Objective C ++代码。 第二组我们将其命名为Djinni,以容纳Djinni支持库,第三组是CalculatorImpl,用于放置在第一部分中创建的所有C ++代码。

我们将从将Djinni生成的Objective C和Objective C ++代码复制到Xcode的Bridge组中开始。 将弹出一个对话框,询问我们是否要创建Bridging-Header.h文件。 单击

然后,我们将手写的C ++代码和标头以及Djinni生成的C ++标头复制到CalculatorImpl组中。 这导致了下面的图片。

完成所有这些步骤后,转到项目中的“构建阶段”选项卡,然后将刚复制的那些文件添加到“编译源”部分。 复制一切!

使用此行#import "CLCalculator.h"将生成的Calculator.h标头导入CalculatorApp-Bridging-Header.h

让我们通过在ViewController.swift中运行求和函数来测试它是否有效

  覆盖 func viewDidLoad(){ 

超级 .viewDidLoad()
//加载视图后进行任何其他设置,...
计算器= CLCalculator.create()
让sumsum =计算器?.summation(3,number2:3)
让减法=计算器?.subtraction(90,number2:10)
print(“求和\(求和?? 0)”)
print(“减法\(减法?? 0)”)
}

并作为最后一步。 启动仿真器并运行程序。 您会在日志中看到Summation 6Subtraction 80 。 有用!! 现在,让我们创建一个与Djinni相乘的函数。 我们将这一行添加到我们的Calculator.djinni文件中。

  #添加乘法 
乘法(number1:i32,number2:i32):i32;

然后,在终端中运行run.sh脚本。 Xcode中的代码将使用乘法功能进行更新。 现在,我们需要做的就是扩展Calculator_impl.hpp文件中的标头,并在Calculator_impl.cpp文件中实现逻辑。 使用以下代码更新ViewController

 覆盖func viewDidLoad(){ 
super.viewDidLoad()
//加载视图后进行任何其他设置,...
计算器= CLCalculator.create()
让sumsum =计算器?.summation(3,number2:3)
让减法=计算器?.subtraction(90,number2:10)

让乘法=计算器?.multiplication(9,number2:9)
print(“求和\(求和?? 0)”)
print(“减法\(减法?? 0)”)

print(“乘法\(乘法?? 0)”)
}

接下来,我们运行代码。 我们将受到欢迎

  求和6 
减法80
乘法81

容易吧? 这就是D ++在C ++中的简单实现。 就个人而言,我确实确实比Android设置起来更容易。 🙂

我没有讲过Djinni的其他部分,这同样重要。 它正在创建一个Djinni接口,用于从C ++调用JNI或ObjC。 .djinni文件中的代码将如下所示。

  call_java_or_objc =接口+ j + o { 
java_or_objc_func(文本:字符串)
}

在单词interface旁边,您是否注意到该接口旁边的+ j+ o而不是+ c+ j表示将C ++转换为Java代码,+ o表示将C ++转换为目标C代码。 这对于创建回调非常有用。

就是这样! 直到下一次,上帝保佑!