首页 文章

Swift桥接返回父类对象而不是派生类

提问于
浏览
1

让我们假设我在Objective C中有一个类,通过桥接我想在我的swift项目中使用 .

@implementation MyClass

+ (instancetype)startVideo:(NSInt *)videoName
{
    return [[MyClass alloc] initWithName:videoName
                              offset:@"0"]

}

- (instancetype)initWithName:(NSString *)name 
               offset:(NSString *)offset
{

    self = [super init];

    return self;
}

现在有两个构造函数将在桥接后的swift版本中可用

class MyClass{
    public convenience init!(videoName: String!)
    public init(name: String!, offset: String)
}

我在我的快速项目中从MyClass派生了类

class MyClass2 : MyClass{
    var purposeOfClass: String = "Child class"
}

使用便捷方法创建MyClass2的对象

var obj = MyClass2("Swift.mov")
print(obj.purposeOfClass) // You will get exception at this point, because the constructor returned Parent's class object.

这里我的问题是,如果无法检查派生类返回对象,桥接转换会使静态方法初始化器初始化器成为原因 .

1 回答

  • 0

    在Swift init 方法中,截断的参数名称来自Objective-C

    - (instancetype)initWithFoo:(NSString *)foo
    

    到斯威夫特

    init(foo : String)
    

    是强制性的 . 你必须写

    let obj = MyClass2(videoName:"Swift.mov")
    print(obj.purposeOfClass)
    

相关问题