2015-06-21 14 views
11

Swift 2'deki yinelemeli enumlarla deneme yapmaya çalışıyorum ancak derleme hataları alıyorum.Swift 2.0 ile yinelemeli enumlar nasıl bildirilir

enum Tree { 
    case Empty 
    indirect case Node(value: Int, left: Tree, right: Tree) 
} 

Ama bir hata alıyorum:

ben kendi örneği tanımlamak için çalışıyor başladı "Bir satırda Ardıl beyanlar ile ayrılmalıdır:".

enum Tree<T> { 
    case Leaf(T) 
    indirect case Node(Tree, Tree) 
} 

Ama aynı zamanda bu onun aynı derleme hatası:

Yani, Swift sunumda Yenilikler onların WWDC15 gelen Apple'ın kendi örnek çalıştı. Yeni bir oyun alanı oluşturup bu satırları yapıştırırsam hatayla sonuçlanır - ekran görüntüsüne bakın veya bir Xcode projesinde aynı şey varsa başka ekran görüntüsüne bakın.

Xcode 7.0 kullanıyorum.

Apple'ın örneğini nasıl derleyemiyorum?

Enums and cases can be marked indirect, which causes the associated value for the enum to be stored indirectly, allowing for recursive data structures to be defined.

aşağıdaki kod Oyun çalışır:

enter image description here enter image description here

+4

, onlar da geliyor ama orada henüz – Juan

+4

Tamam, bu konuşmada Lattner söz söyledi 'dolaylı' anahtar kelime Beta 1'e girmedi (ancak yakında geliyor) – fqdn

cevap

16

release notes göre bu destek devletler Xcode 7 Beta 4, ilave edildi

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) 

Anecdotally, enum kullanarak bir switch çalıştım iyi çalıştı, bu Yeni Swift 2 if case sözdizimini kullanarak tekrar tekrar Xcode çöktü ve Oyun Alanı kullanılamaz hale getirildi. Bunun özellikle enumlarla veya genel beta kararsızlıkla ilgili olup olmadığından emin değilim.


Geçmiş: Bu soru başlangıçta istendi zaman ve kabul Bu cevap anda

, Xcode beta1 son sürüm oldu. Xcode 7 beta1-beta3 bu destek vermedi ve onların sürüm notları aşağıdaki şişirme içeriyordu: Yanlış hatırlamıyorsam

“indirect” enum elements are not yet implemented yet in this beta, they will be added in a later update.

+0

Xcode 7 beta 2 hakkındaki güncellemeden dolayı teşekkür ederiz. –

+0

Belirli bir düğüm için ebeveyn almak mümkün mü? – user965972

+0

Verilen şekilde değil. Değişken yaparsanız, Node'a bir 'ebeveyn' üyesi ekleyebileceğinizi varsayalım, ama bu bana garip geliyor. Benzer bir sorun olan Haskell'de çift bağlantılı bir listenin uygulanmasıyla ilgili bu tartışmaya bakın: http://stackoverflow.com/questions/10386616/how-to-implement-doubly-linked-lists - Eğer bir Ağacın yinelemeli olarak yinelenmeden önce ebeveyn ve çocuk düğümlerine başvurmanız gerekir, bu yüzden algoritmanızı biraz değiştirmeniz gerekebilir. Daha kapsamlı bir tartışmaya ihtiyacınız varsa, bir soru göndermeyi deneyin. – Brett

İlgili konular