问题标签 [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 回答
435 浏览

objective-c - 我可以在静态库中扩展 NSString 类并在带有 Swift 的 App 中使用它吗?

我在自定义静态库 CommonLib 中扩展 NSString :

因为 CommonLib 包含一些 Swift 代码文件,所以我在 CommonLib 项目中创建了一个桥接头文件 CommonLib-Bridging-Header.h:

接下来,我将 CommonLib 链接到我的 App 项目,并在 App 项目中创建一个新文件 Node.swift:

最后,我在我的应用程序的某个地方使用它:

这时候编译就OK了!!!但是当我运行应用程序时它崩溃了:

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[Swift._NSContiguousString isContainsEmoji]:无法识别的选择器发送到实例 0x60400084b340”

所以这里有什么问题吗???以及如何解决它???谢谢 ;)

(PS:我的环境Xcode 9.3.1 swift 4.1)

0 投票
2 回答
4486 浏览

objective-c - 使用参数从 Objective-C 调用 Swift 函数

我想将 Swift 类集成到 UIViewController 类中。我想我所有的设置都是正确的。我有一个带有函数的类 rURLTask:NSObject:

在我的 .swift 文件中,可以从我的 Objective-C 类调用它:

它打印得很好。另一个功能是:

但是这个我不能从Objective-C调用。我试着写:

我得到错误:

'rURLTask' 没有可见的@interface 声明选择器'ladeURL:'

我认为有一个非常基本的错误。在另一个项目中使用 Swift 3 中的 Objective-C 效果很好。

0 投票
0 回答
93 浏览

objective-c - 桥接 Objective-C 代码时的可空性指南

我目前是 Swift 的新手,但我是一个 Objective-C 框架的维护者,它是一个 C 库的包装器,我希望为它提供最好的 API。

我正在看这种代码

并想知道nullable注释是否合理。查看底层 C 函数

很明显,Obj-C 包装器中的模内存分配失败,

这是不可为空的。

或者是吗?

在桥接时,特别是在面对分配失败时,是否有一些具体的指导方针可以被认为是可接受的 wrt 可空性?如果我使该属性nonnull和内存失败,斯威夫特的反应会有所不同吗?

0 投票
2 回答
1299 浏览

ios - 在 Objective C 中看不到 Swift 变量/方法

我无法从Objective C中看到要设置的方法/变量,myVar即使true我已经添加了@objcandpublic修饰符并且方法签名Bool中没有。setMyVarTrue()

Bool这可能是由 Swift和 Objective C之间的差异造成的BOOL

其他类方法/变量是可见的,只是这个特定的不是。

如何Bool从 Objective C 设置 Swift?

SWIFT代码:

目标C代码:

0 投票
2 回答
1334 浏览

ios - 在 ModuleName-Swift.h 中找不到 Xcode Pods 函数

由于一个约束库,我需要在我的 Swift 项目中使用 Objective-C 文件。
因此,我在 .m 文件中添加了导入模块-Swift.h。
它发现它没有任何问题。
问题来自自动生成的模块-Swift.h”文件。
我有很多错误,主要来自来自 Pods 的类和协议。
图片

图片

图片

是否有任何配置可以解决此问题?

0 投票
1 回答
3741 浏览

swift - 未找到 ProjectName-Swift.h / 生成的 Xcode 10

在 Xcode 10 中运行我的项目会引发此错误

fatal error: 'Stories-Swift.h' file not found

我尝试了多种方法,包括:

  • 将新的 swift 文件添加到项目并重建它
  • 设置Defines ModulesYes
  • 仔细检查我的SWIFT_OBJC_INTERFACE_HEADER_NAME并将其设置为$(PROJECT_NAME)-Swift.h

我检查了我的派生数据,没有 ProjectName-Swift.h 的痕迹。

我错过了什么明显的东西吗,TIA。

0 投票
1 回答
178 浏览

swift - 在 swift 4.2 中从公共枚举访问内部枚举时出错

访问公共枚举中的内部枚举值时出现错误

代码片段

错误说

看起来这是因为桥接@Objc但无法解决问题。我无法删除@Objc,因为我的代码也用于 Objective C 项目。

谁能帮我解决这个问题。

PS :更新到Xcode 10后开始观察此错误

0 投票
2 回答
428 浏览

c++ - 使用 Build Phases 上链接的 C++ 库编译 Xcode Swift 项目时出错

我在网上搜索了很多,但没有找到解决我问题的方法。我的目标是在 C++ 中创建一个简单的类并在 Swift 上使用它。为此,我确实遵循了本教程-> http://www.swiftprogrammer.info/swift_call_cpp.html(非常好)。基本上我已经按照以下步骤操作:

  1. 创建junk.cppjunk.h文件
  2. 编译使用g++ or/and clang++
  3. 创建 .a 文件:$ ar r libjunkcpp.a junk.o
  4. 链接到 Xcode 中Build Phases -> Link Binary With Libraries -> Add

因此,当我这样做时,Xcode 不会编译更多我的项目,在 Xcode 的左侧会出现错误消息:

链接器命令失败,退出代码为 1(使用 -v 查看调用)

在日志中,错误消息是:

ld:档案没有架构 x86_64 的目录文件'/Users/augustosansoncadini/Documents/XcodeProjects/Ex_cpp_Swift_CmdLineTool/junk/libjunkcpp.a'

我认为需要编译到它的架构但是当我输入g++ -v结果是:

所以我得出结论,架构目标是正确的。

我认为这张图片可以提供帮助:

在此处输入图像描述

注意: 当我.a从 Link Binary With Libraries 中删除文件时,代码编译得很好。

0 投票
1 回答
652 浏览

c++ - 在 Xcode 上的 Swift 项目上使用 C++ 时出错:架构 x86_64 的未定义符号

网上有很多关于这个的问题,但我无法解决我的问题。这几天我一直在研究这个。

我想在 Swift 项目上运行一个简单的 C++ 类,为此我遵循了本教程:http ://www.swiftprogrammer.info/swift_call_cpp.html 。基本上我已经按照以下步骤操作:

  1. 创建junk.cppjunk.h文件
  2. 编译使用g++ or/and clang++
  3. 创建 .a 文件:$ ar r libjunkcpp.a junk.o
  4. ranlib libjunkcpp.a
  5. 链接到 Xcode 中Build Phases -> Link Binary With Libraries -> Add

当我编译时,出现以下错误:

垃圾变种h

垃圾文件

包装器.cpp

桥接器

int getIntFromCPP();

0 投票
1 回答
1598 浏览

c++ - 如何制作从 C++ 到 Swift 的回调函数指针?

在网上有很多教程可以做到这一点,但没有一个是清晰客观的,因为我更喜欢展示我的案例。

我正在开发一个使用 C API 连接到服务 Web 的 iOS 应用程序,它具有回调函数,我的任务很简单,我必须在 Swift 代码上获取用 C 代码生成的事件。为此,我尝试了一些方法,我正在尝试的当前方法如下。

设想

我有三个文件wrapper.cppBridging-Header.hViewController.swift

Briding-Header.h我声明了一个函数的指针。

桥接-Header.h

wrapper.cpp写了我的代码来连接到网络并使用回调函数。所以这是断开连接时获取状态连接的回调方法。

包装器.cpp

它没有编译,错误消息:Use of undeclared identifier 'callback_t'.

如果我尝试 write: void callback_frame(unsigned char*);linker command failed with exit code 1则会发生错误。

ViewController.swift

我无法导入Bridging-Header.h文件,wrapper.cpp因为会导致很多冲突。