符合多种可选协议的Swift关联类型

时间:2019-06-07 08:35:43

标签: swift optional swift-protocols associated-types

虽然我在处理泛型,但是却陷入了相关类型的协议中。 基本上,我想在这里实现什么,我想将“ ReusableView”,“ NibLoadableView”看作是可选的,并且如果不使用它们,我也不想使我的班级变得井井有条。

例如,如果我仅使用“ ReusableView”进行编译,则会抛出错误

  

“ ExampleBannerPresenter”不符合协议“ BannerPresenter”

那么我如何才能像下面那样使用我的单元格?

final class ExampleBannerCell: UICollectionViewCell, ReusableView {

final class ExampleBannerCell: UICollectionViewCell, ReusableView, NibLoadableView {

这是我的代码

public protocol BannerPresenter: class {
    associatedtype CellType: UICollectionViewCell, ReusableView, NibLoadableView
    func configure(cell: CellType, at index: Int)
}

// MARK: - NibLoadableView
public protocol NibLoadableView: class {
    static var nibName: String { get }
}

extension NibLoadableView where Self: UIView {
    public static var nibName: String {
        return String(describing: self)
    }
}

// MARK: - ReusableView
public protocol ReusableView: class {
    static var defaultReuseIdentifier: String { get }
}

extension ReusableView where Self: UIView {
    public static var defaultReuseIdentifier: String {
        return String(describing: self)
    }
}

0 个答案:

没有答案