Tag: Cpp

在Swift应用中使用C,C ++和Objective-C框架

在Swift应用中使用C,C ++和Objective-C框架 我在尝试中做了一个演讲!Swift东京今年关于在Swift应用程序中使用C,C ++和Objective-C框架。 演示文稿非常简洁,因此我决定详细记录内容以提供更多信息。 本文的结构将分为: C,C ++,Objective-C和Swift之间的语言连接 如何建立依存关系 为什么选择包装器以及如何编写包装器 C,C ++,Objective-C和Swift之间的语言连接 C到Swift C已经47岁了,Swift是一种新的强大的开源语言,它支持C。尽管它不能编译C代码,但它与C具有直接的互操作性,因此我们可以在Swift中直接使用已编译的C代码。 从C ++到Swift C ++和Swift无法直接交谈,因此需要一些手动的中间阶段,例如C或Objective-C。 C ++是C的超集,它提供了面向对象编程的支持。 由于Swift支持C,一种方法是使用仅C的API公开C ++库,然后Swift应用程序可以直接使用该库。 Objective-C ++可以编译包含C ++和Objective-C组合的源文件。 另一种方法是将C ++库包含在Objective-C框架中,并将其提供给Swift。 从Objective-C到Swift Swift可以与可可和大量现有的Objective-C代码一起使用,因此Objective-C与Swift之间的通信非常简单。 如何建立依存关系 为了能够在项目中使用框架,我们首先需要设置依赖项。 我将一一示范。 C库到Swift应用 AC库通常被编译为静态库,这里的挑战是库不包含接口。 Swift也不会自动读取头文件。 因此,这里有一个问题:C标头不可见。 解决此问题的技巧是使用模块映射。 有关在Swift应用程序中设置C库依赖关系的逐步指南,请阅读我的其他中篇文章。 C ++库到Swift应用 正如我之前提到的,Swift无法直接与C ++对话,因此让我们添加一些手动中间阶段,例如,创建一个包含C ++库的Objective-C框架。 在Objective-C框架内部,我们需要将所有C功能包装到Objective-C中。 为了能够在一个文件中同时编译C和Objective-C,诀窍是使用Objective-C ++。 我们可以通过将.m文件重命名为.mm来实现 。 有关详细的设置,请参阅这篇中等文章。 Swift应用的Objective-C框架 为了能够在快速的应用程序中使用Objective-C框架,设置非常简单。 我们需要将Objective-C框架或项目包含到快速应用程序中。 如果我们不使用任何依赖关系管理工具,则只需将Objective-C xcodeproj或框架拖到swift项目中即可。 然后链接框架并导入Objective-C模块,现在我们完成了。 […]

如何在Xcode 8中使用C ++ 14进行编码

首先 ,单击您的项目(在上图中,我的项目名称为LinkedList)。 单击后,您的编码区域将被选项列表代替。 其次 ,单击“ 构建设置”选项。 第三 ,单击“ 全部”以查看与“构建设置”相关的所有可用选项。 最后 ,向下滚动直到找到C ++属性。 我正在使用Xcode版本8.3.2,并且C ++属性位于Apple LLVM 8.1(语言)C ++内部 。 现在,单击C ++语言方言并选择您的编译器。 从图像中可以看到,您有许多可用的编译器。 现在,您可以选择最适合您项目需求的一种。 这种快速的分步操作仅为当前项目定义了C ++ 14编译器。 希望对您有所帮助。 如果您有更好的方法,请告诉我。 🙂

在Swift项目中设置C ++库依赖项

如果我们知道窍门的话,这并不棘手。 T L; DR Swift无法直接读取C ++代码,但是如果我们使用Objective C ++将C ++库包装到一个Objective-C模块中,它将可以解决问题。 第一步:创建一个Objective-C项目 Xcode->新建->项目->可可触摸框架->语言:Objective-C->下一步。 我将项目命名为CppDependencyTutorial 。 第二步:设置项目依赖项 我有一个名为ExampleC ++ Library的静态C框架。 将ExampleC ++ Library.xcodeproj拖到CppDependencyTutorial项目中。 选择目标CppDependencyTutorial- > general- >链接的框架和库-> Add libExampleC ++ Library.a 。 第三步:创建一个Objective-C包装器 选择目标CppDependencyTutorial- > File-> New-> iOS-> Cocoa Touch class-> Next。 我将类CppDependencyWrapper命名为NSObject的子类,语言为:Objective-C。 ❗ 重要步骤 ❗:重命名 CppDependencyWrapper.m到CppDependencyWrapper.mm 。 它成为同时支持C ++和Objective C的Objective-C ++文件。 在CppDependencyWrapper.mm文件中,导入C标头路径。 第五步:在Swift项目中使用Objective-C模块 选择CppDependencyTutorial项目-> 常规 ->单击“ +”以添加新的快速测试目标-> […]

探索一些标准库排序功能

在今天的文章中,我们将探讨一些排序功能。 这些是我们作为开发人员在几乎所有日常任务中使用的非常常见的功能。 我们将探索clang libc ++的一些函数,例如std :: sort,std :: stable_sort和std :: partial_sort。 另外,我们将研究其中一些函数的算法,并尝试了解它们的工作原理。 另外,我们将讨论Swift Collection排序方法\ o /。 使用排序算法时,我们要了解的最重要的事情之一就是时间复杂度。 幸运的是,此信息始终是这些方法文档的一部分,因此在调用标准库排序方法时,我们具有此保证。 分类 std :: sort是使用Introsort算法的排序函数,其复杂度为O(N log(N)),其中N = std :: distance(first,last)自C ++ 11起,且元素顺序相等不能保证保留[3]。 gcc-libstdc ++也使用Introsort算法。 Introsort是一种混合算法,基本上使用两种(或在某些实现中为三种)算法来优化运行时复杂性。 它开始使用Quicksort,并且如果递归深度超出接近O(N log(N))[1]的阈值,它将切换到Heapsort算法,以避免Quicksort最坏情况下具有O(N²)的情况。时间复杂度。 在某些实现中,它使用InsertionSort在排序过程中对小区域进行排序,因为在这种情况下,它的处理效率更高。 我们没有详细介绍Introsort算法的实现细节,但是您可以在[7]上看到伪代码,该伪代码显示了其背后的逻辑。 在下面,我们可以看到一个非常简单的示例,说明如何使用std :: sort对int向量进行升序和降序排序。 这就是本文的全部,希望您喜欢🙂 如果我有问题或您有任何意见或疑问,请告诉我。 我很高兴收到您的反馈feedback 您可以在Twitter上@ LucianoPassos11找到我。 感谢您阅读🙂 参考文献 2017年LLVM开发人员会议:A.基于Kumar Introsort的libc ++排序功能。 https://www.youtube.com/watch?v=Lcz0ZHewkHs “ libc ++” C ++标准库。 […]