问题标签 [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 投票
0 回答
851 浏览

ios - “导入桥接头失败”iOS 单元测试

我有一个带有 2 个开发目标和 1 个单元测试目标的 iOS 项目。开发目标是混合的(同时使用 Objective-c 和 Swift),因此我必须Bridging-Header.h在项目中使用。

问题是当我想使用以下代码将模块导入我的单元测试类时:

通过添加上述行,单元测试将停止构建并输出以下错误:

导入的 Objective-c pod 似乎存在一些问题。解决问题的任何帮助表示赞赏。

PS:我的Podfile

0 投票
1 回答
60 浏览

objective-c - 在混合的 objc/swift 模块中,Xcode 总是尝试包含模块本身

这一点不好解释,但也很烦人。

我正在使用 objc 和 swift 源开发 Cocoapods 框架(处于开发模式)。我们称之为“ SuperCompoment ”框架

Xcode 自动生成SuperComponent-Swift.h文件,以使 Objc 类在 Swift 中可见。
一些 Objc 类还包括 Swift 类。

在编译时,在SuperComponent-Swift.hXcode 中添加该行

...并且无法使用以下消息进行编译:SuperComponent/SuperComponent.h file not found

Xcode 试图将框架包含在框架本身中!

如果我通过注释#import 手动编辑自动生成的文件,项目编译完美。但是 Xcode 会在每次清理之后和归档项目之前自动生成文件!

有什么线索吗?

0 投票
2 回答
819 浏览

objective-c - 从另一个 Swift 类访问在 Obj-C 类中实现的 Swift 协议属性

我已经看到了很多关于在 Swift 中实现 Obj-C 协议的问题,但反过来却没有,而且我还没有具体看到这一点。

我正在使用混合的 Obj-C / Swift 代码库。我有一个定义如下的 Swift 协议:

NamedItem.swift

我有一个现有的 Objective-C 类,它目前有自己的name属性:

MyObjcClass.h

我还有其他几个具有name属性的类,所以显然我想将它们都与一个协议相关联,而不是对一堆不同的类型进行类型转换。现在,如果我尝试将我的 Obj-C 类从拥有自己的属性切换到实现 Swift 协议:

MyObjcClass.h

MyObjcClass.m

这在我的其他 Objective-C 类中效果很好,但是如果我尝试从 Swift 类中访问 name 属性:

SomeSwiftClass.swift

我收到以下错误:

“MyObjcClass”类型的值没有成员“名称”

如果我不删除现有@property声明MyObjcClass.h并省略该@synthesize语句,一切都会正确构建。这似乎很奇怪和错误 - 如果您从 Obj-C 类中采用 Objc-C 协议,则不必重新定义属性,只需@synthesize声明就足够了。

我已经尝试以我能想到的所有方式定义 Swift 协议,并且能够找到有关的建议,但我无法解决这个问题。

那么,在 Objective-C 类中实现 Swift 协议属性(可能是只读属性?)以便另一个 Swift 类可以访问它的正确方法是什么?我真的必须在 Obj-C 标头中重新声明该属性吗?我知道我总是可以放弃它,只在 Objective-C 中定义协议,但是...... Swift 是未来!(或类似的东西...)

0 投票
1 回答
706 浏览

objective-c - 在 Objective-C iOS 应用程序中使用 Swift Project (Siren)

我正在尝试在 iOS Objective-C 应用程序中使用流行的 swift 库Siren。我使用 cocoapods 将库作为框架包含在内,然后运行pod init,然后pod install使用这样的 podfile:

我已经将 swift 代码导入到 AppDelegate.m 文件中,如下所示:

#import <Siren/Siren-Swift.h>

我现在可以访问Siren该类,但似乎无法引用该类的shared静态属性Siren。我已经尝试过[Siren shared]Siren.shared但都没有工作。这是Siren该类的前几行:

是否有在 Objective-C iOS 应用程序中使用 Siren 的文档或示例?这可能吗?我知道我可以使用 Harpy,但由于它不再受支持,所以我尽量避免使用它。我研究过在 Objective-C 代码中使用 Swift,但我找不到任何与访问static let类的属性特别相关的内容。我发现这个有用的答案,但它提到了全局变量,而不是静态类属性。

0 投票
1 回答
114 浏览

ios - 用 KVC 绕过 ObjC 到 Swift 的桥接?

最近在我们的应用程序中遇到了崩溃:

它来自 webView 决定我们访问请求属性的策略:

我相信问题出在 swift lib 中的这一行: https ://github.com/apple/swift-corelibs-foundation/blob/master/Foundation/URLRequest.swift#L298

这里没有守卫,似乎在 objc 方面,请求可能为零。

我的问题是关于如何绕过 objc 来快速桥接。KVC 会避免这种情况吗?

如果没有办法绕过 objc 来快速桥接它是我们将不得不忍受的崩溃?它不会发生得太频繁,但足以让我们愿意修复。

0 投票
1 回答
420 浏览

objective-c - 如何在swift中导入Objective c文件

您好,我正在开发 react native 项目,我使用这个如何将 iOS react native 模板转换为 swift 从目标 c 转换为 swift?线。

现在我想使用这个https://github.com/wonday/react-native-orientation-locker来集成这个库我需要导入方向类但是当我导入方向类时我收到错误

这是我的项目层次结构

在此处输入图像描述

所以我的问题是我们如何在 swift 项目中导入目标 c 文件,或者我们如何在桥接头文件中导入第三方库

当我以这种方式导入它时

我收到以下错误

❌错误:未能发出预编译头文件'/Users/softech/Desktop/vsts-agent-osx-x64-2.136.1/_work/r2/a/Application/ios/build/VidizmoMobileApp/Build/Intermediates.noindex/PrecompiledHeaders/ VidizmoMobileApp-Bridging-Header-swift_G3EOBN6WTSYG-clang_3DYYERZEW34TU.pch' 用于桥接头 /Users/softech/Desktop/vsts-agent-osx-x64-2.136.1/_work/r2/a/Application/ios/VidizmoMobileApp-Bridging-Header。 H

错误 无法构建 iOS 项目。我们运行了“xcodebuild”命令,但它以错误代码 65 退出。要进一步调试构建日志,请考虑使用 Xcode.app 构建您的应用程序,方法是打开 VidizmoMobileApp.xcworkspace

0 投票
1 回答
759 浏览

objective-c - 如何从objective-c类推送一个快速视图控制器并将数据传回并继续objective-c类中的下一个过程

我想从我的目标 C uiviewcontroller 推送 swift UIViewController 并等待该视图控制器发回数据。我该怎么做。

我尝试在 swift 中使用协议/委托,但它会引发错误,因为它在 objc .h 文件中不可用,即使我正在导入“Pass-swift.h”桥接头文件。

我很好奇我是否可以使用完成块,如果是,那么如何?或任何其他方法?

// .h 文件

//SecurityQuestionViewController.swift

//我应该将数据返回给 ParentViewController,它应该等待 swift 视图控制器发回数据,然后它应该转到下一个函数/方法 - singupWithSecurityQuestion。

0 投票
1 回答
50 浏览

objective-c - 为什么即使文件在桥中,我也无法访问 Objective-C 方法?

我有一个包含很多objective-c代码的项目。现在我想在我的 swift 文件中访问该代码。objective-c但是由于某种原因,即使我可以启动该类的对象,我也无法访问这些方法。

我有一个添加bridge-file的所有.h文件称为projectName-Bridge-Header.h

并且它的路径被添加到build-settings(一个附带问题:即使没有将桥路径添加到 ,我也可以从一个类中启动一个对象build-settings。为什么会这样?):

在此处输入图像描述

我可以从类中初始化一个对象,但我无法访问该方法:

最后一行给出了方法不存在的错误。

我是新手,objective-c所以它可能非常简单。不过,这超出了我的范围。

0 投票
1 回答
186 浏览

objective-c - 未能尝试在我的 Swift 项目中使用带有桥接头的 Objective-C 库

我想我已经完成了所有必要的步骤,但由于某种原因它失败了。这是我得到的错误:

显示所有消息未定义符号:_OBJC_CLASS_$_HCKBeaconCentralManager

在此处输入图像描述

我在构建设置中设置了文件:

在此处输入图像描述

这是桥文件的内容:

以防万一这是我用来尝试调用 SDK 类的代码:

0 投票
1 回答
60 浏览

objective-c - 在 Xcode 11.3 中读取文档中的文件失败

当我使用它读取文档中的文件stringWithContentsOfURL时失败

这是 Xcode 控制台中的错误:

错误域 = NSCocoaErrorDomain 代码 = 256 “文件“1.txt”无法打开。” UserInfo={NSURL=/var/mobile/Containers/Data/Application/E026973D-11B6-4895-B8FE-7F9FBCC11C12/Documents/bbbb/1.txt}

这是我的代码: