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 类