10. protocol CardViewModelType {
var cardType: CardType { get }
var title: String? { get }
var subTitle: String? { get }
var rating: Double? { get }
var reviewCount: Int? { get }
var profileImageButtonViewModel: ProfileImageButtonViewModelType? { get }
var coverImageURLString: String? { get }
var tags: [String]? { get }
// Input
var didWish: PublishSubject<Bool>? { get }
// Output
var wish: Driver<Bool>? { get }
var disposeBag: DisposeBag { get }
}
enum CardType {
case small, big
var cellSize: CGSize {
switch self {
case .small:
return CGSize(width: 160, height: 200)
case .big:
return CGSize(width: 250, height: 230)
}
}
}
25. enum CardType {
case small, big
var cellSize: CGSize {
switch self {
case .small:
return CGSize(width: 160, height: 200)
case .big:
return CGSize(width: 250, height: 230)
}
}
}
26. enum CardType {
case small, big, realFinalISwearGodFinalType
var cellSize: CGSize {
switch self {
case .small:
return CGSize(width: 160, height: 200)
case .big:
return CGSize(width: 250, height: 230)
case .realFinalISwearGodFinalType:
return CGSize(width: 320, height: 100)
}
}
}
27. protocol CardViewModelType {
var cardType: CardType { get }
var title: String? { get }
var subTitle: String? { get }
var rating: Double? { get }
var reviewCount: Int? { get }
var profileImageButtonViewModel: ProfileImageButtonViewModelType? { get }
var coverImageURLString: String? { get }
var tags: [String]? { get }
// Input
var didWish: PublishSubject<Bool>? { get }
// Output
var wish: Driver<Bool>? { get }
var disposeBag: DisposeBag { get }
}
28. protocol CardViewType {
var coverImageView: UIImageView? { get }
...
}
extension CardType: CardViewType {
var coverImageView: UIImageView? {
switch self {
case .big:
let imageView = UIImageView(frame: self.coverImageSize.rect)
...
return imageView
case .small:
let imageView = UIImageView(frame: self.coverImageSize.rect)
...
return imageView
case .realFinalISwearGodFinalType:
return nil
}
}
...
}
29.
30. final class CardView: UIView, CardViewType {
let coverImageView: UIImageView?
...
private var disposeBag: DisposeBag
required init(on superview: UIView, with viewModel: CardViewModelType,
inset: UIEdgeInsets = .zero) {
self.coverImageView = viewModel.cardType.coverImageView
...
super.init(frame: viewModel.cardType.cellSize.rect)
superview.addSubview(self)
self.snp.makeConstraints {
$0.size.equalTo(viewModel.cardType.cellSize)
$0.edges.equalTo(superview.snp.edges).inset(inset)
}
self.configure(by: viewModel)
self.configureLayout(by: viewModel)
}
...