Перечисления

indirect enum Shape {
    case point(IntInt)
    case line(ShapeShape)

    func toString() -> String {
        switch self {
            case .point(let x, let y):
                return "(\(x), \(y))"
            case .line(let p1, let p2):
                return p1.toString() + "; " + p2.toString()
        }
    }
}

let point1 = Shape.point(34)
let point2 = Shape.point(79)
let line = Shape.line(point1, point2)
let info = line.toString()
//info is "(3, 4); (7, 9)"

print("info is \(info)")