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

Jas*_*ues 6 objective-c swift

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

+ (instancetype)assembly;
Run Code Online (Sandbox Code Playgroud)

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

var assembly : ApplicationAssembly! = ApplicationAssembly.assembly()
Run Code Online (Sandbox Code Playgroud)

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

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

在此输入图像描述

dre*_*wag 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"
Run Code Online (Sandbox Code Playgroud)

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