我做了一个有associatedType
的协议。
public protocol HBPrerollProtocol: NSObjectProtocol {
associatedtype HBContentType
func set(content: HBContentType, startImmediately: Bool) // set configuration and begin
}
我正在尝试创建一个具有符合协议的属性的视图。
open class HBPrerollPlayerView: HBPlayerView {
open var preroll: HBPrerollProtocol?
}
然而,这不起作用,因为协议有associateType
。错误如下:
协议'HBPrerollProtocol'只能用作通用约束,因为它具有Self或关联类型要求
所以我试图制作一个符合HBPrerollProtocol
的视图,并使var成为这个视图。
class HBPrerollView<T>: UIView, HBPrerollProtocol {
typealias HBContentType = T
func set(content: HBContentType, startImmediately: Bool) { }
}
和
open class HBPrerollPlayerView<T>: HBPlayerView {
open var preroll: HBPrerollView<T>?
}
这导致了不同的错误:
无法声明属性,因为其类型使用内部类型
因为这些类在一个独立的模块中,所以我必须使类型通用,所以我可以使用不同模块的类。
我在这里的任务是:
associatedType
的var conforms协议?T
公开或公开?你在找这样的东西吗?
public protocol HBPrerollProtocol: NSObjectProtocol {
associatedtype HBContentType
func set(content: HBContentType, startImmediately: Bool) // set configuration and begin
}
open class HBPrerollPlayerView<T: HBPrerollProtocol>: HBPlayerView {
open var preroll: T?
}