Общий тип enum в target-c - PullRequest
       18

Общий тип enum в target-c

1 голос
/ 01 мая 2019

У меня есть два класса 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?.

1 Ответ

0 голосов
/ 02 мая 2019

Нет, вы не можете использовать enum со связанными типами в цели c.Язык не поддерживает это.

...