Свифт: Есть ли способ, которым я мог бы определить, мне нужно реализовать только одну функцию в протоколе? - PullRequest
1 голос
/ 14 марта 2019

Предполагая, что у нас есть протокол с двумя возможными функциями конфигурации. Но один и только один из них требуется для любого его разработчика.

public protocol Car {
  associatedtype T

  func configure(with model: T, engine: EngineType)
  func configure(with model: T)
}

С учетом вышесказанного мне нужно будет реализовать оба варианта. Есть ли способ сделать это необходимым только для реализации одного из них?

Ответы [ 2 ]

1 голос
/ 14 марта 2019

Вы можете объявить протокол только с одной функцией и с необязательной EngineType. Затем всегда используйте его со значением по умолчанию. Таким образом, myCar.configure(with:) и myCar.configure(with:engine:) могут быть вызваны.

protocol Car {
    associatedtype T

    func configure(with model: T, engine: EngineType?)
}


class MyCar : Car {
    typealias T = Int

    func configure(with model: Int, engine: EngineType? = nil) {

    }

}
0 голосов
/ 14 марта 2019

Один из способов сделать это -

@objc protocol MyProtocol {

    @objc optional func maybeDoSomething()
    func mustDoSomething()
}

class MyClass : MyProtocol {
    func mustDoSomething() {

    }
// No need to implement maybeDoSomething() method
}

Другой способ -

protocol MySwiftProtocol {
    func implementThisMethod()
    func mayNotImplementThisMethod()
}

extension MySwiftProtocol {
    func mayNotImplementThisMethod() {
        //Nothing to do here
    }
}

class MySwiftClass:MySwiftProtocol {
    func implementThisMethod() {
        //This has to be implemented
    }
//No need to implement mayNotImplementThisMethod() method

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