Swift-使用具体实现时类型不符合协议

时间:2018-08-29 13:34:52

标签: swift protocols

在此代码中:

protocol TestProtocol {
    var someVar: String { get }
}

protocol WithTestProtocol {
    var someVarWithTestProtocol: TestProtocol { get }
}

struct TestProtocolStruct: TestProtocol {
    var someVar: String {
        return ""
    }
}

struct WithTestProtocolStruct: WithTestProtocol {
    var someVarWithTestProtocol: TestProtocolStruct {
        return TestProtocolStruct()
    }
}

我收到错误消息:

Type 'WithTestProtocolStruct' does not conform to protocol 'WithTestProtocol'

为什么无法通过具体实现来遵守协议?有好的解决方法吗?

我知道,此代码有效:

struct WithTestProtocolStruct: WithTestProtocol {
    var someVarWithTestProtocol: TestProtocol {
        return TestProtocolStruct()
    }
}

..但是我需要在此处使用具体的实现,因为我想使用具体实现的其他内容。我认为这是一个非常常见的情况,我想知道为什么编译器不允许这样做。

2 个答案:

答案 0 :(得分:0)

您对协议类型的定义是<Button> <StackPanel> <Icons:PlayIcon IconBrush="Green" Width="28" Height="28" /> </StackPanel> </Button>

TestProtocol

答案 1 :(得分:0)

使用协议属性时,您必须提供特定的类型。

struct WithTestProtocolStruct: WithTestProtocol {
  var someVarWithTestProtocol: TestProtocol {
    return TestProtocolStruct()
  }
}

实际上TestProtocolStruct可能会或可能不会确认TestProtocol编译器不允许这样做。