将Objective-C与Swift桥接,以便访问其他CocoaPods。

9 浏览
0 Comments

将Objective-C与Swift桥接,以便访问其他CocoaPods。

我在Swift中编写了一个库,但无法将其导入到我当前使用Objective-C编写的项目中。\n有没有办法可以导入它?\n#import \"SCLAlertView.swift\" - 找不到\'SCLAlertView.swift\'文件\n

0
0 Comments

在使用CocoaPods访问其他的CocoaPods时,会出现Bridge Objective-C to Swift的问题。问题的原因是在Objective-C的.m文件中只能导入"ProductName-Swift.h",而不能在Objective-C的头文件中导入。为了避免循环引用,可以在Objective-C的头文件中采用前向声明的方式来使用Swift类,但是无法在Objective-C中对Swift类进行子类化。

解决这个问题的方法是在Build Settings的Packaging中,确保Framework目标的Defines Module设置为Yes,然后在任何在该Framework目标中的Objective-C的.m文件中使用以下语法导入Swift代码:"#import "ProductName-Swift.h""。这样做可以使Swift文件在包含此导入语句的Objective-C的.m文件中可见。

另外,还有一些注意事项需要注意。首先,不能在Objective-C的头文件中导入Swift文件,而应该采用前向声明的方式。其次,不能在Objective-C中对Swift类进行子类化。最后,如果想要导入一个Swift扩展,可以直接使用"ProductName-Swift.h"。

在某些情况下,还可以尝试其他的导入方式,例如:

- #import

- #import

- #import

需要注意的是,在使用Swift类时,需要从NSObject派生出来,例如class Blah : NSObject。此外,如果遇到问题,可以阅读相关的答案和文档以获取更多帮助。

总之,Bridge Objective-C to Swift的问题出现的原因是在Objective-C的.m文件中只能导入"ProductName-Swift.h",而不能在Objective-C的头文件中导入。解决这个问题的方法是在Build Settings中设置Defines Module为Yes,并在Objective-C的.m文件中使用正确的导入语法。同时,需要注意一些限制和注意事项,避免出现其他错误。

0
0 Comments

【Bridge Objective-C to Swift for accessing other CocoaPods】

在使用Objective-C创建的项目中,如果要访问其他CocoaPods的库,需要进行一些设置来实现Objective-C与Swift的桥接。下面是具体操作步骤:

1. 创建一个Objective-C项目。

2. 创建一个.swift文件。

3. 弹出窗口会询问"Would You like to configure an Objective-C bridging Header",选择"Yes"。

4. 点击Xcode项目文件。

5. 点击Build Settings。

6. 在搜索栏中搜索"Defines Module"。

7. 将其值改为"Yes"。

8. 搜索"Product Module Name"。

9. 将其值改为项目的名称。

10. 在AppDelegate文件中添加以下代码:#import "YourProjectName-Swift.h"。

注意:每次要使用Swift文件时,都必须导入以下代码:#import "YourProjectName-Swift.h"。将Build Settings中的Defines module值改为Yes是解决问题的关键。

此外,还有一些其他参考意见和注意事项:

- Embedded Content Contains Swift: YES也可以使用。

- 在Xcode 7.3.1及更高版本中,步骤7-8是不需要的。

- 对于某些特殊字符的项目名称,可能需要根据步骤8的项目名称的格式进行调整。

- 这个方法并不完全回答了OP的问题。

通过进行一系列设置,可以实现Objective-C和Swift之间的桥接,从而在Objective-C项目中访问其他CocoaPods的库。这对于那些需要在Objective-C项目中使用Swift的开发者来说非常有用。

0
0 Comments

在使用CocoaPods访问其他CocoaPods时,有一个名为"Bridge Objective-C to Swift"的问题。这个问题的出现原因是,在Objective-C文件中引入Swift文件时,需要导入ProductName-Swift.h文件。注意,这里的"ProductName"是产品名称,而不是类名。

解决方法如下:

- 如果产品名称中包含空格,请用下划线替换空格(比如将"My Project"替换为"My_Project-Swift.h")

- 如果目标是一个框架(framework),需要导入<ProductName/ProductName-Swift.h>

- 确保你的Swift文件是目标的成员

- 注意,如果你尝试在导入中使用Swift文件名,你会在Swift文件的"import Foundation"后面得到一个"Expected ';' after top level declarator"的错误提示。

此外,如果你的项目名称包含空格或特殊字符,则需要用下划线替换它们,比如"My App"应该替换为"My_App-Swift.h"。

在Framework目标中,可以将#import <ProjectName/ProjectName-Swift.h>添加到Umbrella Header中。

某些情况下,为什么这么难,文档又写得这么差。有人回答说,其实并不难,第一次可能会有点困难,但之后你就会掌握它了。

还某些情况下,他在Objective-C类中使用#import "SCLAlertView-Swift.h",但是却得到了"SCLAlertView-Swift.h not found"的错误。他问是否做错了什么。

还某些情况下,他使用#import "Wow_Dictionary-Swift.h",其中"Wow Dictionary"是他的项目名称。但是他却得到了"Wow_Dictionary-Swift.h not found"的错误。他问是否还是做错了什么。

有人回答说,实际上,应该使用目标名称(Target Name),而不是项目名称(Project Name)。

还某些情况下,他试图导入Swift头文件,但是没有成功。他的项目中有两个目标,其中一个Objective-C文件需要访问两个目标的Swift头文件。他问如何解决这个问题。

有人回答说,可以创建一个新的头文件,其中导入Target1-Swift.hTarget2-Swift.h,然后将该头文件导入到Objective-C文件中。

还某些情况下,他找到了一个新的方法来找到正确的生成的头文件名称。他说,可以进入目标(target)的Build Settings,然后搜索关键词"Objective-C Generated Interface Header Name"。

最后,有人感谢提到"Make sure your Swift file is member of the target"这句话,因为它解决了他的问题。

0