2016-08-19 3 views
0

Я пытаюсь понять, как добавить соответствие протокола экземпляру, если экземпляр имеет определенное значение. Это «глупый» пример того, что я пытаюсь понять.Быстрые протоколы: добавление соответствия протокола экземпляру

enum TypeOfFigure { 
    case square, circle, triangle 
} 

protocol Figure { 
    var type: TypeOfFigure { get } 
} 
protocol Square {} 
protocol Circle {} 
protocol Triangle {} 


class FigureType: Figure { 
    let type: TypeOfFigure 

    init (type: TypeOfFigure) { 
     self.type = type 
     switch type { 
     case .square: //extension self: Square {} 
     case .circle: //extension self: Circle {} 
     case .triangle: //extension self: Triangle {} 
     } 
    } 

} 

ответ

4

Я предлагаю альтернативный подход,

Вы можете использовать фабричный метод:

class FigureTypeFactory { 
    static func createFigure(withType type: TypeOfFigure) -> Figure { 
     switch type { 
      case .square: return new FigureSquare() 
      case .circle: return new FigureCircle() 
      case .triangle: return new FigureTriangle() 
     } 
    } 
} 

class Figure { } 

class FigureSquare: Figure, Square { } 
+0

Гораздо лучший подход ИМО. –

+0

Спасибо, это мой реальный подход, но в этом случае я должен объявить слишком много классов, я искал что-то более совпадающее. –

+0

@AndreaMiotto Можете ли вы обновить свое сообщение с помощью методов/свойств этих протоколов? Это может помочь мне подумать о других решениях –

1

На "The Swift Programming Language":

Протокол может затем приниматься классом, структурой или перечислением для обеспечения фактической реализации этих требований. Говорят, что любой тип, который удовлетворяет требованиям протокола, соответствует этому протоколу.

https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Protocols.html

Таким образом, вы не можете добавить протокол соответствия к определенному экземпляру.

 Смежные вопросы

  • Нет связанных вопросов^_^