- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我通常是习惯使用 Visual Studio 的 .NET 开发人员,所以如果我弄错了一些 iOS 术语,请原谅我。
我想做的是在新的 Swift iOS 应用程序中引用 Objective-C 库中定义的类型。
具体来说,我正在尝试使用 [本文 ( https://danielsaidi.wordpress.com/2014/09/04/my-approach-to-ioc-in-ios/ ) 的作者描述的 CoreMeta 库进行依赖注入(inject)。
在 XCode 中,我使用 swift 创建了一个新的空白单 View 应用程序,并且添加了对文章中提到的 CoreMeta 库的引用(注意:我对 Xcode 在添加引用。我尝试将库拖放到 swift 应用程序并将两个项目添加到新工作区,但这两种方法都会导致我将要描述的相同问题)
我知道我需要一个桥接头,所以我右键单击 swift 项目并添加一个新文件,选择头文件并添加一个格式为 projectname-bridging-header.h 的新头文件。
我读过的文档建议 Xcode 应该为我创建这个,但我没有弹出这个对话框。
在 swift 项目的build设置中,在常规选项卡下,我添加了 libCoreMeta.a 文件(我假设这是来自 objc 库的构建程序集)和 Swift 编译器下的build设置 - 代码生成我有指向我添加的文件的桥接 header 值。
这是我可能会感到困惑的地方。在桥接头文件中,我尝试执行的导入语句的每个变体都会导致“找不到文件”错误,因此应用程序的其余部分无法使用任何类型。
在文章中,IoCContainer 对象是在 NSObject+IoCContainer.h 中定义的,因此 #import "NSObject+IoCContainer.h"的任何变体似乎都不起作用。
我敢肯定这是我在这里遗漏的非常明显的东西,所以任何帮助都会很棒。
编辑
为了简单起见,我刚刚创建了一个新的 swift 应用程序,向其中添加了 CoreMeta 库,添加了一个 ObjectiveC 文件(并收到了创建桥接 header 的请求),但我仍然无法确定要添加到桥接中的内容header 来访问 CoreMeta 库中的内容。文件结构如下
和 TestSwiftApp-Bridging-Header.h
我显然在 namespace 和其他东西如何与 iOS 一起工作方面存在知识空白
最佳答案
Xcode 将为您创建一个桥接 header 。当您单击 File -> New -> File...
然后选择在 Objective-C 项目中创建 Swift 文件或在 Swift 项目中创建 Objective-C 文件时,它会执行此操作:
不过,重要的不是桥接头名称的格式。桥接头可以有您选择的任何名称。重要的是在build设置中将哪个文件设置为桥接 header 。
首先,在您的项目中创建任何头文件。
在您的 Project Navigator
中,单击目标:
现在点击这里的目标:
然后在此处选择“build设置”:
一直向下滚动到名为“Swift 编译器 - 代码生成”的部分:
请注意:只有当您有要编译的 .swift
文件时,该部分才会实际显示。如果您没有项目正在编译的任何 .swift
文件,那么将已经杂乱无章的build设置选项与您甚至不包括的语言的一整套选项混为一谈是没有意义的在你的项目中。
如果 Xcode 从未为您提供自动配置桥接 header 的选项,则“Objective-C Bridging Header”行要么为空白,要么没有选择文件。您所要做的就是单击此处并输入您的新文件名:
有趣的事情要注意...如果有必要,您可以定义不同的 Debug 和 Release 构建桥接 header 。
关于将库的头文件导入到要用作桥接头文件的文件中时遇到的问题的最后说明:您实际上有必要为您正在使用的库获取头文件的副本使用。您不能只将 .a
文件放入您的项目中。您需要该库附带的 .a
和任何/所有相应的 .h
文件。因此,请确保您的项目中有 .h
文件以及正确设置的桥接 header 。
关于objective-c - Swift Application 的 Objective C 库中定义的引用类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29064722/
我正在尝试编写一个相当多态的库。我遇到了一种更容易表现出来却很难说出来的情况。它看起来有点像这样: {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE
谁能解释一下这个表达式是如何工作的? type = type || 'any'; 这是否意味着如果类型未定义则使用“任意”? 最佳答案 如果 type 为“falsy”(即 false,或 undef
我有一个界面,在IAnimal.fs中, namespace Kingdom type IAnimal = abstract member Eat : Food -> unit 以及另一个成功
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: What is the difference between (type)value and type(va
在 C# 中,default(Nullable) 之间有区别吗? (或 default(long?) )和 default(long) ? Long只是一个例子,它可以是任何其他struct类型。 最
假设我有一个案例类: case class Foo(num: Int, str: String, bool: Boolean) 现在我还有一个简单的包装器: sealed trait Wrapper[
这个问题在这里已经有了答案: Create C# delegate type with ref parameter at runtime (1 个回答) 关闭 2 年前。 为了即时创建委托(dele
我正在尝试获取图像的 dct。一开始我遇到了错误 The function/feature is not implemented (Odd-size DCT's are not implemented
我正在尝试使用 AFNetworking 的 AFPropertyListRequestOperation,但是当我尝试下载它时,出现错误 预期的内容类型{( “应用程序/x-plist” )}, 得
我在下面收到错误。我知道这段代码的意思,但我不知道界面应该是什么样子: Element implicitly has an 'any' type because index expression is
我尝试将 SignalType 从 ReactiveCocoa 扩展为自定义 ErrorType,代码如下所示 enum MyError: ErrorType { // .. cases }
我无法在任何其他问题中找到答案。假设我有一个抽象父类(super class) Abstract0,它有两个子类 Concrete1 和 Concrete1。我希望能够在 Abstract0 中定义类
我想知道为什么这个索引没有用在 RANGE 类型中,而是用在 INDEX 中: 索引: CREATE INDEX myindex ON orders(order_date); 查询: EXPLAIN
我正在使用 RxJava,现在我尝试通过提供 lambda 来订阅可观察对象: observableProvider.stringForKey(CURRENT_DELETED_ID) .sub
我已经尝试了几乎所有解决问题的方法,其中包括。为 提供类型使用app.use(express.static('public'))还有更多,但我似乎无法为此找到解决方案。 index.js : imp
以下哪个 CSS 选择器更快? input[type="submit"] { /* styles */ } 或 [type="submit"] { /* styles */ } 只是好
我不知道这个设置有什么问题,我在 IDEA 中获得了所有注释(@Controller、@Repository、@Service),它在行号左侧显示 bean,然后转到该 bean。 这是错误: 14-
我听从了建议 registering java function as a callback in C function并且可以使用“简单”类型(例如整数和字符串)进行回调,例如: jstring j
有一些 java 类,加载到 Oracle 数据库(版本 11g)和 pl/sql 函数包装器: create or replace function getDataFromJava( in_uLis
我已经从 David Walsh 的 css 动画回调中获取代码并将其修改为 TypeScript。但是,我收到一个错误,我不知道为什么: interface IBrowserPrefix { [
我是一名优秀的程序员,十分优秀!