【发布时间】:2016-07-09 17:57:13
【问题描述】:
在使用 Xcode 7.3 和 Swift 2.2 进行构建时,我遇到了“模糊使用 init”错误
这个问题与两个 Objective-C 类以及 Swift 如何查看它们的初始化程序有关。
Objc 看到:
超类
@interface Foo: NSManagedObject
+(instancetype)fooWithOwner:(Owner *)owner insertIntoManagedObjectContext:(NSManagedObjectContext *)context;
子类
@interface Bar: Foo
+(instancetype)barWithOwner:(Owner *)owner insertIntoManagedObjectContext:(NSManagedObjectContext *)context;
而 Swift 只看到:
init(owner: Owner!, insertIntoManagedObjectContext context: NSManagedObjectContext!)
这导致编译器不确定在子类“Bar”上调用了哪个 init。有没有办法在初始化子类时指定使用哪个初始化程序?如果可能,我想避免重构 init 方法。
【问题讨论】:
-
您可以重命名为
makeFooWithOwner...和makeBarWithOwner...或类似名称,但不会将它们转换为初始化程序 -
您能发布您遇到问题的 Swift 代码吗?我复制/粘贴到一个新项目中,编译没有任何问题。
-
最初的 Obj-C 方法没有理由应该有不同的名称。
标签: ios objective-c swift