问题标签 [objective-c-swift-bridge]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
485 浏览

objective-c - Objective-C - 现有代码库的 Swift 桥接性能

对于有将 swift 添加到现有 Objective-C 代码库中的经验的开发人员的性能问题。

我的前提是:最终Bridging-Header.h可能会变得非常大(它可能最终包含所有 1.5k 现有的 Objective-C 类(提供或获取那些不会从 Swift 访问的类)),反之亦然PRODUCT-Swift.h生成的标头。

我担心编译性能可能会急剧下降:每次包含的任何.h类发生更改时,都必须重新编译所有.swift文件。

是这样吗?如果是这样,有没有办法优化性能?

澄清:假设您将整个项目类包含到.pch文件中,现在每个类更改都会触发整个项目的重新编译。是否与Bridging-Header.h工作方式相似?

0 投票
1 回答
2236 浏览

objective-c - 桥接头文件中找不到文件错误

我有一个objective-c项目。我正在研究它大约两年。现在我想用 Swift 做新的工作。

我添加了一个新的 Swift 类。Xcode 要求我添加 BridggingHeader 文件,然后我按下是。

但现在在桥接头文件中,我想导入我当前的objective-c分类,但这个文件不识别我的objective-c文件。

例如当我写:

xcode 显示错误并说:

0 投票
4 回答
16424 浏览

ios - 如何删除桥头而不出错?

前几天我在我的应用程序中添加了一个桥头,因为我试图将 Objective-C 文件添加到我的 Swift 项目中。我无法让连接正常工作(而且我也不知道如何实现 Objective-C 文件),所以我决定重新开始。我删除了 Objective-C 文件和 Bridge-Header 文件,现在我收到一条错误消息:
<unknown>:0: error: bridging header '/Users/CalebKleveter/Documents/Development/iOS/personal/swift/Projects/Dicey/Dicey/Dicey-Bridging-Header.h' does not exist

Xcode 桥头错误 Xcode 项目的文件树

0 投票
1 回答
783 浏览

ios - 将 Swift 代码导入到 Objective-C 文件

我创建了一个Swift项目并导入了 Objective-C 文件。在导入期间, Xcode要求我创建一个桥接头并创建一个标头。

现在在同一个项目的 Objective-C 文件中,我想使用 Swift 类方法。我搜索了有关在 Objective-C 文件中导入 Swift 代码的信息。我发现我们必须ProjectName-Swift.h在Objective-C文件中导入。我的问题如下:

  1. ProjectName-Swift.h 不是由 Xcode 创建的。如何创建该文件?
  2. 创建 ProjectName-Swift.h 文件后,如何在 Objective-C 文件中使用 Swift 文件方法?
0 投票
1 回答
5663 浏览

objective-c - 类型“SwiftClass”不能符合协议“ObjcProtocol”,因为它有无法满足的要求

我有一个我正在尝试在 Swift 类中实现的 Objective-C 协议。例如:

当我尝试在这样的 Swift 类中遵守它时:

我收到以下可怕的编译器错误:

类型“SwiftClass”不能符合协议“ObjcProtocol”,因为它有无法满足的要求。

我该如何解决这个问题?

0 投票
1 回答
714 浏览

ios - Objective-C 中的 SlideMenuControllerSwift 实现

我尝试在 Objective-c中添加SlideMenuControllerSwift 。

我可以在我的 AppDelegate.m中访问[slideMenuController openLeft]

SlideMenuControllerSwift具有UIViewController 扩展。

但是如何在 obj-c ViewController.m 中访问 toggleLeft() ?

0 投票
1 回答
140 浏览

ios - 从嵌入式 Objective C 框架调用 Swift

我有一个用 Swift 编写的名为 ColorApp 的应用程序,它调用 ASwiftFramework(我的 swift 文件的集合)以及 AnObjCFramework(Objective C 文件的嵌入式框架)。在我的顶级桥接头中,我只有:#import AnObjCFramework/AnObjCFramework.h>.

我在 AnObjCFramework 中的一个类中有一个错误,我编写了一个修复程序并将其合并到一个新的 Swift 类中。我想从 AnObjCFramework 中的一个类中调用这个 swift 类(是的,它是 NSObject 的子类)。那可能吗?

我知道修复 Objective C 代码更容易,但我想更好地了解如何使用混合库。

总结一下:
ColorApp (Swift) --> ASwiftFramework (Swift)--> AnObjCFramework (ObjectiveC)-> (Swift Class)

0 投票
0 回答
23 浏览

objective-c-swift-bridge - 在同一个项目中使用 swift 和 Objective c 时编译器的行为如何?

Swift 在编译时做了更多的工作,比如属性的内存分配,而 Objective C 在运行时做同样的工作。Swift 使用优化编译器。如果存在混合和匹配,即具有 swift 代码和目标 c 的同一个项目,将使用哪个编译器 swift 或目标 c,以及它在编译时和运行时的行为如何相对于 swift 和目标 c。

0 投票
1 回答
871 浏览

swift - swift中的箭头运算符

我正在尝试在 swift 项目中采用用objective-c 编写的SDK。初始化SDK的objective-c方式如下:

我不相信 swift 中有与箭头运算符等效的东西,所以仍然可以初始化吗?我似乎找不到有关他特定主题的任何信息。

0 投票
1 回答
860 浏览

objective-c - Swift 中的 NS_ENUM

注意:这不是这个问题的欺骗。

我正在尝试在 Swift中使用名为GBCli的库。它是用 Objective-C 编写的。我在使用特定枚举时遇到问题:

我正在尝试使用以下方法:

在文档中,建议的用途是:

我尝试将其翻译为:

注意:这似乎GBValueRequirements是库使用的参数类型,但这GBValueFlag是他们希望您传递给所述方法的实际类型。证据:typedef NSUInteger GBValueRequirements;,上面提到的枚举,以及许多函数采用GBValueRequirements. 另请注意,每个案例GBValueFlags都是排他的,因此它们不应该被或在一起。

但是,这给出了一个错误Type 'UInt' has no member 'Required',看到枚举被定义为类型NSUInteger(应该转换为 UInt)是没有意义的。我可以访问 GBValueFlags,但我看不到任何 swift 将它翻译成的内容。奇怪的是,这有效:

但这不会:

因为它抛出:

在编译时。我应该如何将等价物传递.Required给该方法?

定义我自己的枚举不起作用,因为 GBCli 的内部代码会根据自己的枚举检查参数。