首页 > 解决方案 > 一个类如何符合具有协议约束关联类型的协议?

问题描述

问题标题很难理解,但是当您查看代码示例时,您会明白我的意思。我试图通过使用协议 B 作为类型别名来使 D 类符合协议 C。我认为这样就可以了,因为 B 也符合 A,这是在 C 中的关联类型中定义的约束,但是编译器会抛出错误。我想做的事是不可能的吗?

protocol A { }
protocol B: A { }

protocol C {
    associatedtype T: A
}

class D: C {
    typealias T = B
}

注意:如果 B 是一个类而不是一个协议,它就可以工作。

标签: swift

解决方案


概述

  • 不确定您是否真的需要关联类型
  • 改用基本协议

代码

protocol A { }
protocol B: A { }

protocol C {
    
    func f1(something : A)
}

class D : C {
    
    func f1(something: A) { }
}


class X : B {}

let d1 = D()

d1.f1(something: X())

推荐阅读