我有一个协议:
protocol CellContentViewButtonTappable: CellContentView {
associatedtype ButtonData
var delegate: (any CellContentViewButtonTappableDelegate)? { get }
}
和代表:
protocol CellContentViewButtonTappableDelegate: AnyObject {
associatedtype ButtonData
func buttonTapped(_ data: ButtonData)
}
这里的要点是,当我从一个符合CellContentViewButtonTappable
的类中调用delegate?.buttonTapped(_:)
时,我希望我传递回来的ButtonData
与符合CellContentViewButtonTappableDelegate
的类中的ButtonData
相同。但我不太确定如何做到这一点。我尝试过以下方法:
protocol CellContentViewButtonTappable: CellContentView {
associatedtype ButtonData where ButtonData == CellContentViewButtonTappableDelegate.ButtonData
var delegate: (any CellContentViewButtonTappableDelegate)? { get }
}
但是沿着这条路线走下去总是会导致错误:
Associated type 'ButtonData' can only be used with a concrete type or generic parameter base
我觉得我已经接近this change added in Swift 4了,应该允许我做这样的事情,但是我就是没有做对。如果有人能给我指出正确的方向,我会很感激的。
1条答案
按热度按时间nwnhqdif1#
我认为您需要Swift 5.7中的primary associated types特性,而不是Swift 4中的关联类型约束。
以
ButtonData
做为委派的主要相关型别,宣告委派如下:在
CellContentViewButtonTappable
中,可以执行以下操作: