Как изменить тип возврата функции переопределения в Swift - PullRequest
0 голосов
/ 08 декабря 2018
@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.Как мне реализовать вышеизложенное?Я пытался использовать Generics, но они не доступны для разработчика Objective-C после создания библиотеки.

Я хочу использовать:

A.getSomething () и C.getSomething () для возврата объекта Something

и B.getSomething () ввернуть объект SomethingGood.

И я не хочу получать две одинаковые именованные функции func getSomething () для B с двумя разными типами возвращаемых значений.

Есть идеи?

Код используется в статической библиотеке, написанной на Swift.Как только библиотека скомпилирована, она должна быть доступна как для swift, так и для target-c.

1 Ответ

0 голосов
/ 08 декабря 2018

Вы не можете изменить тип возврата, иначе он не будет 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...