如何在类中转换为协议类型?

问题描述 投票:1回答:1

这是我的代码:

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中的self转换为动态类型(如协议扩展名)ProtocolA.Type

swift swift-protocols
1个回答
0
投票

根据您的问题,您正在尝试将类实例转换为协议类型实例,这是不可能的,因为您的类不符合该协议。

从类/结构实例到协议类型实例的直接转换是不可能的,您只能通过接受该类/结构作为方法参数或通过将其他属性分配给哪种协议类型来转换为协议类型,这称为隐式类型铸件。

请阅读本文以了解有关协议和类类型的更多信息

  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
© www.soinside.com 2019 - 2024. All rights reserved.