Ответ 1
В соответствии с примечаниями к выпуску поддержка этого была добавлена в Xcode 7 beta 4, которая гласит:
Перечисления и случаи могут быть отмечены косвенными, что вызывает значение для перечисления, которое будет храниться косвенно, что позволяет использовать рекурсивный структуры данных, которые необходимо определить.
На игровой площадке работает следующий код:
enum Tree {
case Empty
indirect case Node(value: Int, left: Tree, right: Tree)
}
let tree1 = Tree.Node(value: 0, left: Tree.Empty, right: Tree.Empty)
let tree2 = Tree.Node(value: 0, left: Tree.Node(value: -1, Tree.Empty, Tree.Empty), right: Tree.Empty)
Анекдотически попытка использования перечисления с switch
отлично работала, но с использованием нового синтаксиса Swift 2 if case
неоднократно разбивался Xcode и делал Playground непригодным. Я не уверен, связано ли это конкретно с перечислениями или просто с общей бета-нестабильностью.
Фон:
В то время, когда этот вопрос был первоначально задан и этот ответ был принят, Xcode beta1 был последней версией. Xcode 7 beta1-beta3 не поддержал это, и в примечаниях к выпуску содержались следующие формулировки:
"косвенные" элементы перечисления еще не реализованы в этой бета-версии, они будут добавлены в более позднем обновлении.