Swift协议:为实例添加协议一致性

时间:2016-08-19 13:08:28

标签: ios swift protocols swift-protocols

我试图了解如果实例具有特定值,如何向实例添加协议一致性。这是一个"愚蠢的"我试图理解的例子。

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 {}
        }
    }

}

2 个答案:

答案 0 :(得分: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 { }

答案 1 :(得分:1)

从“Swift编程语言”开始:

  

然后可以通过类,结构或枚举来采用该协议,以提供这些要求的实际实现。任何满足协议要求的类型都被认为符合该协议。

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

因此,您无法将协议一致性添加到特定实例。