gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 08:55:36 25 4
gpt4 key购买 nike

假设我在 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)
}

我在我的 swift 项目中从 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.

这里我的问题是,如果无法检查派生类返回对象,为什么桥接转换使静态方法初始化程序方便初始化程序。

最佳答案

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

 - (instancetype)initWithFoo:(NSString *)foo 

到 swift

  init(foo : String) 

是强制性的。你必须写

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

关于objective-c - Swift 桥接返回父类对象而不是派生类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33164933/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com