У меня есть два класса target-c HondaDealerShip
и FordDealerShip
.Они оба содержат похожие свойства и методы, поэтому я хочу определить общий протокол DealerShip
и выполнить некоторый полиморфизм.
Проблема в том, что DealerShip
должен содержать общие свойства типа enum, так что HondaDealerShip
и FordDealerShip
может иметь различные concrete
типы перечислений.
Так что я хочу что-то вроде этого,
@protocol DealerShip
@property (nonatomic, readonly) enum location;
-(void)printPriceOfModel:(enum)vehicleModel;
@end
typedef NS_ENUM(NSInteger, HondaLocation) {
HondaLocationSouthEast,
HondaLocationNorthWest
}
typedef NS_ENUM(NSInteger, HondaModel) {
Accord,
Civic
}
@interface HondaDealerShip: NSObject<DealerShip>
@property (nonatomic, readonly) HondaLocation location;
- (void)printPriceOfModel:(HondaModel)vehicleModel {
//print price here
}
@end
typedef NS_ENUM(NSInteger, FordLocation) {
FordLocationEast,
FordLocationWest
}
typedef NS_ENUM(NSInteger, FordModel) {
Mustang,
Focus
}
@interface FordDealerShip: NSObject<DealerShip>
@property (nonatomic, readonly) FordLocation location;
- (void)printPriceOfModel:(FordModel)vehicleModel {
//print price here
}
@end
Если я должен сделать это в swift
, Я мог бы использовать протоколы со связанными типами, как показано ниже
protocol DealerShip {
associatedtype Location
associatedtype Model
var location: Location { get }
func printPriceOfModel(model : Model)
}
enum HondaLocation: Int {
case sountEast
case northWest
}
enum HondaModel: Int {
case accord
case civic
}
struct HondaDealerShip: DealerShip {
var location: HondaLocation
func printPriceOfModel(model: HondaModel) {
//print
}
}
//same for FordDealerShip
Могу ли я сделать подобное в target-c?.