Проблема в этой функции:
static func useGeometry() -> Classification {
return Classification(rawValue: Int())!
}
Вы создаете новую Классификацию с rawValue, оцененным Int (), который будет возвращать новый объект Int со значением по умолчанию (Int () == 0).
Поэтому, когда вы вызываете useGeometry из оператора switch, он всегда будет возвращать .Circle, потому что rawValue фактически всегда равен 0.
Возможно, вы хотите передать целое число, например, может быть, значение строки?, Чтобы использовать Geometry, что-то, совпадающее до значения перечисления Classification. Примерно так:
static func useGeometry(value: Int) -> Classification {
return Classification(rawValue: value)!
}
Примечание. Будьте осторожны, чтобы не вызывать его с недопустимым значением, иначе произойдет сбой, поскольку вы принудительно распаковываете результат конструктора.
А затем вызвать его со значением:
switch Classification.useGeometry(value: shapeStartingRow) {
...
}