如何在Swift

时间:2018-12-07 21:01:06

标签: objective-c swift inheritance

@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都应该可以使用它。

1 个答案:

答案 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
}