从Objective-C工厂方法创建Swift实例

时间:2014-06-07 04:35:41

标签: objective-c swift

我有一个TyphoonAssembly的子类,它包含这个工厂方法:

+ (instancetype)assembly;

我试图在测试中使用它如下:

var assembly : ApplicationAssembly! = ApplicationAssembly.assembly()

但是得到错误' assembly()不可用' (见图)。

从Objective-C类方法创建Swift实例的正确方法是什么。

enter image description here

1 个答案:

答案 0 :(得分:4)

当将代码从objective-C桥接到swift时,编译器会尝试将类方法构造函数转换为普通的初始化器。尝试只调用ApplicationAssembly()并查看它是否调用了您的类方法。您还可以更改类方法的名称,以便编译器不会将其识别为常见的构造函数命名。

以下是功能桥的示例:

// Objective-C
@implementation ApplicationAssembly

+ (instancetype)assemblyWithValue:(NSString *)value
{
    ApplicationAssembly *new = [[self alloc] init];
    new.value = @"Some_Value_To_Make_Sure_That_This_Code_Is_Running";
    return new;
}

@end

// Swift
var assembly = ApplicationAssembly(value: "")
println(assembly.value) // outputs "Some_Value_To_Make_Sure_That_This_Code_Is_Running"

它不适用于您尝试访问的空类方法构造函数。