Как привести к типу протокола в классе? - PullRequest
0 голосов
/ 05 декабря 2018

Это мой код:

protocol ProtocolA {
    static var myProperty: Int { get }
}

protocol ProtocolB {}

extension ProtocolB {
    func letsDoSomething() {
        (Self.self as! ProtocolA.Type).myProperty // Works
    }
}

class MyClass {
    func castSelfToProtocolAType() {
        (Self.self as! ProtocolA.Type).myProperty // Doesn't work
        (Self as! ProtocolA.Type).myProperty // Doesn't work also
    }
}

Как я могу привести себя в MyClass к динамическому типу (как в расширении протокола) ProtocolA.Type?

1 Ответ

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

По вашему вопросу вы пытаетесь преобразовать ваш экземпляр класса в экземпляр типа протокола, что невозможно, поскольку ваш класс не соответствует этому протоколу.

ПрямоеПреобразование из экземпляра класса / структуры в экземпляр типа протокола невозможно, вы можете преобразовать его в тип протокола только путем принятия этого класса / структуры в качестве параметра метода или путем присвоения другому свойству того типа протокола, который известен как неявное приведение типа.

Пожалуйста, прочитайте эту статью, чтобы понять больше о протоколах и типах классов

  1. https://medium.com/swift-india/protocol-the-power-of-swift-5dfe9bc41a99
  2. https://medium.com/swift-india/protocol-the-power-of-swift-950c85bb69b1
  3. https://medium.com/swift-india/protocol-the-power-of-swift-45e97f6531f9
  4. https://medium.com/@hitendrahckr/protocol-the-power-of-swift-6906cdedd867
  5. https://medium.com/swift-india/protocol-the-power-of-swift-1e5b86bfd1dc
...