在 Swift 中使用 Objective-C 扩展类

Posted

技术标签:

【中文标题】在 Swift 中使用 Objective-C 扩展类【英文标题】:Using Objective-C extension classes in Swift 【发布时间】:2014-10-27 17:18:54 【问题描述】:

我正在尝试用 Swift 编写我的 Objective-C 项目的新功能。我有一个名为 NSString+Extensions 的现有 Objective-C 文件,定义如下

@interface NSString (Extensions) 

该文件被命名为 NSString.Extensions.h。我有一些特定于应用程序的实例方法(例如:stringByRemovingSpecialCharacters)。我添加了一个头文件(桥接头),在我的项目设置中的 Swift Compiler - Code Generation 中具体说明它。我在该头文件中添加了#import "NSString+Extensions.h"。但是扩展文件中的任何方法都不能从 Swift 文件中调用。如何在 Swift 中使用这个扩展文件?我有更多的扩展文件 - NSData+Encryption.h 等,我也想使用它们。

【问题讨论】:

你看到这个了吗:***.com/questions/24006264/…? 我在 Swift 代码中使用过这样的扩展文件。你能发布你的文件的内容吗?我在 Xcode 6.0.1 中遇到的一个问题是,如果导入的 .h 文件包含方法的重复定义,那么在重复方法定义之后声明的任何内容在 Swift 中都不可见。因此,如果您的 .h 恰好很长,请检查重复定义并将其删除。 【参考方案1】:

如果你向 swift 项目添加一个 Objective-C 文件,xcode 会询问你是否想添加一个 Objective-C 桥接头,你回答是。然后你应该在桥接文件中导入你的文件,这将允许你从你的 swift 文件中调用它们。 PS然后您可以删除现在没有用的objective-C文件。

【讨论】:

是的,我已经这样做了。我可以这样使用我的自定义 Obj-C 类(为了清楚起见,我更新了我的问题以说桥接头)但我不能使用作为 Obj-C 主要或本机扩展的 obj-C 文件(如何你叫它吗?)类ex:NSString。我的自定义类是 - NSString (Extensions) 或 NSString+Extensions.h。因此,如果我导入该标头,我可以执行 NSString *str = @"foo%&$%&"; str = [str stringByRemovingSpecialCharacters]; 我认为你不想删除你的 Objective-C 文件。桥接头有该文件的import语句,该文件需要存在。 不只是您创建的用于提示 xcode 构建桥接头的虚拟文件。

以上是关于在 Swift 中使用 Objective-C 扩展类的主要内容,如果未能解决你的问题,请参考以下文章

在 Objective-C 代码中使用 Swift 的缺点?

在 Objective-C 代码中使用 Swift 的缺点?

在 Swift 中使用 Objective-C 枚举

Objective-C 观察者 - 如何在 Swift 中使用

在自定义 Swift 框架中的 Objective-C 文件上使用 Swift

如何在 Swift 中使用 Objective-C #define