如何正确使用具有协议和不同类型的泛型?

How to correctly use generics with protocols and different types?

我在 Swift 5 中编写了下面的脚本,但我在配置泛型方面做错了。

基本上它是一个 Foo 协议,其函数具有一个泛型类型的参数,它在 FezFoz 中实现,其中 [=14] 的类型=]函数定义在class定义中。通过使用 associatedtype 可以解决这个问题吗?

知道可能是什么以及如何解决吗?我在设置泛型时做错了什么吗?我需要同时支持 IntString

protocol Foo {
  func bar<T>(zed: T)
}

class Fez: Foo {
  private var zed: Int = 0
  func bar<Int>(zed: Int) {
    self.zed = zed            //Cannot assign value of type 'Int' to type 'Swift.Int'
  }
}

class Foz: Foo {
  private var zed: String = ""
  func bar<String>(zed: String) {
    self.zed = zed            //Cannot assign value of type 'String' to type 'Swift.String'
  }
}

非常感谢。

对于反对者:希望你今天过得愉快。

像这样的泛型表示调用者可以选择任何类型传递给 bar,实现将处理它。你的意思是实现可以决定它可以传递什么类型,这是你建议的关联类型。

protocol Foo {
    associatedtype Zed
    func bar(zed: Zed)
}

class Fez: Foo {
  private var zed: Int = 0
  func bar(zed: Int) {
    self.zed = zed
  }
}

class Foz: Foo {
  private var zed: String = ""
  func bar(zed: String) {
    self.zed = zed
  }
}