Swift 无法识别这个特定的 Objective C 类构造函数

Posted

技术标签:

【中文标题】Swift 无法识别这个特定的 Objective C 类构造函数【英文标题】:Swift Does Not Recognize This Specific Objective C Class Constructor 【发布时间】:2015-06-12 04:45:49 【问题描述】:

我正在尝试使用这个类

REDActionSheet.h

我已将它导入到我的桥接头和所有内容中。我还有其他 Objective C 类。 XCode 似乎检测到了这个类,我可以正常初始化它。

然而,Swift 似乎无法识别这个类的构造函数

这是它在Objective C中的初始化方式

REDActionSheet *actionSheet = [[REDActionSheet alloc] initWithCancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitlesList:@"1", @"2", @"3", nil];

但是当我尝试在 Swift 中使用它时。 Swift 无法识别构造函数。对于其他库,Swift 似乎足够智能,可以检测到构造函数。 XCode 代码完成似乎也没有检测到构造函数

我只能这样初始化。

var actionSheet: REDActionSheet = RedActionSheet();

通常 XCode 会足够聪明,可以给我这样的构造函数

var actionSheet: REDActionSheet = REDActionSheet(cancelButtonTitle: "Cancel", 破坏性ButtonTitle: "Destroy", otherButtonTitlesList: ["1", "2", "3"], nil);

但是对于这个类,好像不是这样的

由于我没有使用 Objective C 的经验。我不知道是什么让 Swift 能够识别 Objective C 构造函数

有什么想法吗?

【问题讨论】:

【参考方案1】:

问题在于初始化器是一个可变参数的 Obj-C 方法,它不会自动导入到 Swift 中。

This answer 描述了如何将 C 可变参数方法公开给 Swift。

如果这有点多,您可以创建一个带有固定数量参数的小型 Obj-C 扩展:

MyExtension.h

@interface REDActionSheet (MyExtension)
- (instancetype)initWithCancelButtonTitle:(NSString*)cancelButtonTitle
                   destructiveButtonTitle:(NSString*)destructiveButtonTitle
                         otherButtonTitle:(NSString*)otherButtonTitle;
@end

MyExtension.m

@implementation REDActionSheet (MyExtension)

- (instancetype)initWithCancelButtonTitle:(NSString *)cancelButtonTitle destructiveButtonTitle:(NSString *)destructiveButtonTitle otherButtonTitle:(NSString*)otherButtonTitle

    return [self initWithCancelButtonTitle:cancelButtonTitle
                    destructiveButtonTitle:destructiveButtonTitle
                     otherButtonTitlesList:otherButtonTitle, nil];


@end

【讨论】:

您好,谢谢,我是如何创建这两个文件的,但我怎么称呼它呢?谢谢达伦【参考方案2】:

最后一个参数是可变参数,而不是列表,所以使用:

var actionSheet: REDActionSheet = REDActionSheet(cancelButtonTitle: "Cancel", destructiveButtonTitle: "Destroy", otherButtonTitlesList: "1", "2", "3", nil);

【讨论】:

以上是关于Swift 无法识别这个特定的 Objective C 类构造函数的主要内容,如果未能解决你的问题,请参考以下文章

升级到 Xcode 10 后,无法快速识别 Objective C 类

将 Objective C 框架导入我的 Swift 项目后,我的项目无法识别桥接文件中的头文件

无法从 swift 控制器代码访问 Objective C 类

无法在框架项目的 Objective-C 代码中导入 Swift 类

从 Objective-C 桥接到 swift 时,swift 编译器如何识别变量是复制的还是强的?

为啥 Objective-C 看不到特定的 Swift 类?