var符合具有associateType的协议

问题描述 投票:0回答:1

我做了一个有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>?
}

这导致了不同的错误:

无法声明属性,因为其类型使用内部类型

因为这些类在一个独立的模块中,所以我必须使类型通用,所以我可以使用不同模块的类。

我在这里的任务是:

  1. 有没有办法制作一个具有associatedType的var conforms协议?
  2. 如果没有,我怎样才能使通用型T公开或公开?
swift generics protocols
1个回答
1
投票

你在找这样的东西吗?

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?
}
© www.soinside.com 2019 - 2024. All rights reserved.