Свифт расширяет протокол - PullRequest
0 голосов
/ 25 мая 2019

Здравствуйте, так что я хочу реализовать что-то подобное в swift

Пример Kotlin:

class SessionManager(
    private val freeManager: FreeManager
) : FreeManager by freeManager 
{
}

здесь FreeManager - это интерфейс. Я передаю ссылку через конструктор, и теперь я могу написать в расширенной части FreeManager с помощью freeManager, который не требует от меня реализации всех методов интерфейса, как я могу добиться чего-то похожего в swift с протоколами?

Могу ли я сделать что-то вроде этого:

class SessionManager : FreeManager {

init(freeManager: FreeManager) {
    // assign freeManager to extended protocol instead of implementing 
    //all needed methods from protocol
}
}

Ответы [ 2 ]

2 голосов
/ 25 мая 2019

Вы можете достичь того, что ищете, используя protocol и protocol extension.

1. Создатьprotocol имя FreeManager с двумя методами,

protocol FreeManager {
    func method1()
    func method2()
}

На данный момент, method1() и method2() являются обязательными для реализации conforming type.

2. Создайте protocol extension и реализуйте метод protocol, который вы хотите сделать optional, то есть

extension FreeManager {
    func method2() {
        print("This is method2()")
    }
}

В приведенном выше коде я реализовал method2() в protocol extension.Итак, теперь реализация этого метода составляет optional для conforming type.method1() все еще является обязательным для реализации.

3. Соответствует классу SessionManager FreeManager

class SessionManager: FreeManager {
    func method1() {
        print("This is method1()")
    }
}

В приведенном выше коде я реализовалтолько method1().

0 голосов
/ 25 мая 2019

В Swift вы можете расширить сам протокол:

protocol Foo {
    func bar()
}

extension Foo {
    func bar() {
        print("bar")
    }
}

class Bar: Foo {
}

let bar = Bar()
bar.bar()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...