@objc public class A: NSObject
{
public func getSomething() -> Something
{
return Something()
}
}
@objc public class B: A{
override public func getSomething() -> SomethingGood
{
return SomethingGood()
}
}
@objc public class C: A{
...
}
@objc public class Something: NSObject{
var name: String=“”
}
@objc public class SomethingGood: Something{
var type_id: Int = 0
}
Swift编译器显示B类的重写函数的不兼容类型。我该如何实施?我尝试使用泛型,但是一旦构建库,Objective-C开发人员将无法使用它们。
我希望能够使用:
A.getSomething()和C.getSomething()返回Something的对象
和B.getSomething()返回SomethingGood的对象。
我不想获得两个相同的命名函数,它是具有两个不同返回类型的B的func getSomething()函数。
有什么主意吗?
该代码在用Swift编写的静态库中使用。一旦编译了库,swift和Objective-c都应该可以使用它。
答案 0 :(得分:5)
您无法更改返回类型,否则它将不是override
。在这种情况下,您仍然可以返回SomethingGood
,只是您的函数声明不能显示返回类型。
@objc public class B: A{
override public func getSomething() -> Something
{
return SomethingGood()
}
// now whereever you're calling this, if you know it's SomethingGood, you can cast it
if let somethingGood = b.getSomething() as? SomethingGood {
// do something good
}