Пока я имею дело с генериками, я застреваю с протоколами связанного типа.По сути, то, чего я хочу достичь здесь, я хочу считать «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)
}
}